の結果が である理由(cons (list 1 2) (list 3 4))は((1 2) 3 4)?
なぜ結果の長さが 3(3 要素) なのか不思議です。私の直感では、それ
(list 1 2)はリストであり、リストで(list 3 4)もあると思います。プロシージャを使用consすると、結果は各要素がリストの 2 つの要素になるはずですが、結果は期待どおりではありません。
理由を教えてもらえますか?ありがとう。
(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が ではなくappend、list(すべての要素を同等に扱う) ではないということです: リストを扱う場合、それは本質的に非対称です。左のスポットは要素 (「ヘッド」) を保持します。右のものはリストの残りを保持します (「テール」)。