さかもとのブログ

つらつらと

第6章練習問題

(define (my-length lis)
  (define (loop a n)
    (if (null? a) n
        (loop (cdr a) (+ 1 n))))
  (loop lis 0))

(define (my-length lis)
  (if (null? lis) 0
      (+ 1 (my-length (cdr lis)))))
(my-length '(1 2 (4 5) 3))

(define (my-filter pred lis)
  (define (loop a b)
    (cond [(null? a) (reverse b)]
          [(pred (car a)) (loop (cdr a) (cons (car a) b))]
          [else (loop (cdr a) b)]))
  (loop lis '()))

(define (my-filter pred lis)
  (cond [(null? lis) '()]
        [(pred (car lis)) (cons (car lis) (my-filter pred (cdr lis)))]
        [else (my-filter pred (cdr lis))]))
(my-filter char-alphabetic? '(#\2 #\3 #\a #\b))

;;末尾再帰reverse
(define (my-reverse lis)
  (define (my-reverse-rec lis1 lis2)
    (if (null? lis1) lis2
        (my-reverse-rec (cdr lis1) (cons (car lis1) lis2))))
  (my-reverse-rec lis '()))