Exercise 17 [難易度 2]
リスト値が扱えるように mini Scheme5
インタプリタを変更せよ.
Scheme のリストは空リストを (),リストへの要素の追加を(2引数)プ
リミティブ cons,要素を列挙しリストを構成するための(可変個引数)
プリミティブ list で構成する.また,リストが空かどうかを判定する
(真偽値を返す)null,先頭要素を返す car,後続リストを返す
cdr というプリミティブを使ってリスト操作を行なう.
リストの出力結果は要素を空白で区切って並べ () で囲んだ形になる.
⇒ (list 1 2 3 4)
(1 2 3 4)
⇒ (cons 0 (list 1 2 3 4))
(0 1 2 3 4)
⇒ (cons (list 1 2) (list 3 4))
((1 2) 3 4)
最後の例からわかるように,Scheme では要素の型が揃っている必要はないこと
に注目.(第一要素がリスト (1 2)であり,残りの要素は整数である.)
これで,リスト操作をする様々な関数をテストせよ.
⇒ (letrec ((append (lambda (l1 l2)
(if (null l1) l2
(cons (car l1) (append (cdr l1) l2))))))
(append (list 1 2) (list 3 4)))
(1 2 3 4)