-1

の結果が である理由(cons (list 1 2) (list 3 4))((1 2) 3 4)?

なぜ結果の長さが 3(3 要素) なのか不思議です。私の直感では、それ (list 1 2)はリストであり、リストで(list 3 4)もあると思います。プロシージャを使用consすると、結果は各要素がリストの 2 つの要素になるはずですが、結果は期待どおりではありません。

理由を教えてもらえますか?ありがとう。

4

1 に答える 1

7

(list a b c)は、定義上、 と同等(cons a (list b c))です (または、変換を続ける場合は(cons a (cons b (cons c nil))).

したがって、 と書くと、これは、 または(cons 1 (list 3 4))と同等です。(cons 1 (cons 3 (cons 4 nil)))(list 1 3 4)

ここで、 に置き換える1(list 1 2)、次のようになります:(cons (list 1 2) (cons 3 (cons 4 nil)))または同等の(list (list 1 2) 3 4)(または、完全に書き出された(cons (cons 1 (cons 2 nil)) (cons 3 (cons 4 nil))))。

ここでの鍵は、それconsが ではなくappendlist(すべての要素を同等に扱う) ではないということです: リストを扱う場合、それは本質的に非対称です。左のスポットは要素 (「ヘッド」) を保持します。右のものはリストの残りを保持します (「テール」)。

于 2013-01-29T02:02:13.587 に答える