2009/05/10

[scheme]union

WS0744

リストの和集合を求めたかったわけですね。しかし出来上がったコードは・・・、自分の残念なセンスに涙目。

本当はunion-distinct(重複を省いた和集合)を求める手続きを書こうとしたんですが、自分のコードのあまりの冗長さに嫌になりやめました。もう一度「The Little Schemer」をやり直します;;

 

コード

(define union
  (lambda (l1 l2)
    (cond
     ((and (null? l1)(null? l2)) '())
     ((null? l1)
      (cons (car l2)
            (union l1 (cdr l2))))
     ((null? l2)
      (cons (car l1)
            (union (cdr l1) l2)))
     (else (cons (car l1)
                 (cons (car l2)
                       (union (cdr l1)(cdr l2))))))))

 

実行結果

(union '(1 2 3)'(4 5 6))
(union '(1 2 3 4 5)'(6 7 8))
(union '(1 2)'(3 4 5 6 7 8 9 10))
(union '(1 2 3)'(1 2 3))



gosh>union
gosh> (1 4 2 5 3 6)
gosh> (1 6 2 7 3 8 4 5)
gosh> (1 3 2 4 5 6 7 8 9 10)
gosh> (1 1 2 2 3 3)
gosh>

0 件のコメント:

コメントを投稿