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

問題3.69

pairs を参考にして考える。

(define (triples s t u)
  (cons-stream
    (list (stream-car s) (stream-car t) (stream-car u))
    (interleave
      (stream-map (lambda (x) (cons (stream-car s) x))
                  (pairs (stream-cdr t) (stream-cdr u)))
      (triples (stream-cdr s) (stream-cdr t) (stream-cdr u)))))

(define triples-of-integers (triples integers integers integers))

(stream-head triples-of-integers 10)
gosh> (1 1 1)
(1 2 2)
(2 2 2)
(1 2 3)
(2 3 3)
(1 3 3)
(3 3 3)
(1 2 4)
(2 3 4)
(1 3 4)
done

Pythagorasの三つ組みは201ページの素数を抽出する手続きを参考にして考える。

(define pythagoras
  (stream-filter (lambda (triple)
                         (= (+ (square (car triple)) (square (cadr triple))) (square (caddr triple))))
                 triples-of-integers))

(stream-head pythagoras 5)
gosh> (3 4 5)
(6 8 10)
(5 12 13)
(9 12 15)
(8 15 17)
done
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»