問題2.20 – SICP(計算機プログラムの構造と解釈)その37

ドット末尾記法(dotted-tail notation)

ドットの後にあるパラメータはリストになる。

(define (f x y . z)
  (print x y z))
(f 1 2 3 4 5)
gosh> 12(3 4 5)
(f 1 2)
gosh> 12()

(define (g . w)
  (print w))
(g 1 2 3 4 5)
gosh> (1 2 3 4 5)
(g)
gosh> ()

;lambda を使って定義する。
(define f (lambda (x y . z) print x y z))
(f 1 2 3 4 5)
gosh> (3 4 5)

(define g (lambda w print w))
(g 1 2 3 4 5)
gosh> (1 2 3 4 5)

問題2.20

(define (same-parity x . y)
  (define (iter result items)
    (if (null? items)
        result
        (cond ((and (even? x) (even? (car items)))
               (iter (append result (list (car items))) (cdr items)))
              ((and (not (even? x)) (not (even? (car items))))
               (iter (append result (list (car items))) (cdr items)))
              (else
                (iter result (cdr items))))))
  (iter (list x) y))

(same-parity 1 2 3 4 5 6 7)
gosh> (1 3 5 7)
(same-parity 2 3 4 5 6 7)
gosh> (2 4 6)
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»