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

問題2.62

  • set1 が空集合の場合は set2 を返す。
  • set2 が空集合の場合は set1 を返す。
  • set1 の最初の要素と set2 の最初の要素が等しい場合は、"set1 の最初の要素"と "set1set2 の残りの要素のリストの和集合から成るリスト"を返す。
  • set1 の最初の要素が set2 の最初の要素より小さい場合は、"set1 の最初の要素"と "set1 の残りの要素のリストとset2 のリストの和集合からなるリスト"を返す。
  • set1 の最初の要素が set2 の最初の要素より大きい場合は、"set2 の最初の要素"と "set1 のリストとset2 の残りの要素のリストの和集合からなるリスト"を返す。
(define (union-set set1 set2)
  (cond ((null? set1) set2)
        ((null? set2) set1)
        (else
          (let ((x1 (car set1))
                (x2 (car set2)))
               (cond ((= x1 x2)
                      (cons x1 (union-set (cdr set1) (cdr set2))))
                     ((< x1 x2)
                      (cons x1 (union-set (cdr set1) set2)))
                     ((> x1 x2)
                      (cons x2 (union-set set1 (cdr set2)))))))))

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