もうひとつのScheme入門 7.繰り返し の練習問題


もうひとつの Scheme 入門 7 繰り返しこのサイトの練習問題1が解けたのでそれをメモとして記事にしておく。

(define (my-length lst)
  (if (null? lst)
    0
    (+ 1 (my-length (cdr lst)))))
(my-length '(1 2 3 4 5))
5
(define (my-sum lst)
  (if (null? lst)
    0
    (+ (car lst) (my-sum (cdr lst)))))
(my-sum '(3 10 45 5))
63
(define (element-remove lst element)
  (cond ( (null? lst) '())
        ( (equal? (car lst) element)
         (cdr lst))
        (else (cons (car lst)
                    (element-remove (cdr lst) element)))))
(element-remove '(1 2 3 4 5) 8)
(1 2 3 4 5)
(element-remove '(1 2 3 4 5) 4)
(1 2 3 5)
(define (element-position position element lst)
  (if (null? lst)
    #f
    (let ((head (car lst)))
      (if (equal? head element)
       position
       (element-position (+ 1 position) element (cdr lst))))))
(element-position 0 3 '(1 2 3 4 5))
2
(element-position 0 8 '(1 2 3 4 5))
#f

こういうのは解いては忘れ、解いては忘れを繰り返してるからこういうとこに書かないとすぐわからんようになる…。