2017-11-28 10 views
1

ペアの構成と表現を理解しようとしています。 のは、以下の結果を見てみましょう:スキームペアの構築

(length (cons '(a b) '(d e f))) 
=> 4 

今の順序を切り替えることができます:

(length (cons '(d e f) '(a b))) 
=> 3 

しかし

(length (car (cons '(d e f) '(a b)))) 
=> 3 

あなたは上記の結果を説明していただけますか? 車とcdrの違いは何ですか?

答えて

2

consは、歴史的な理由から、最初のものをcar、次のものをcdrといいます。

2番目が適切なリストである場合、その結果もリストになります。したがって、リストは、consの結果として定義され、結果は1つの要素がconsとなります...など、空のリスト'()に達するまで続きます。たとえば、次のように

(cons 1 (cons 2 (cons 3 '()))) 
=> '(1 2 3) 

リストを扱う場合は、残りの要素としてリストとcdrの最初の要素としてcarを考えると、consは、リストの先頭に1つの以上の要素が追加されます - その要素ができます何でもあり、を含むです。それはちょうど先頭に追加されます、リストは "合併されていません"(私たちはそれにappendを使用します)。このように、最初のものは残りが​​で、リストの最初の要素として'(a b)が追加されますので、私たちは今、4要素のリストを持っている - あなたの例については、今

(car '(1 2 3)) 
=> 1 

(cdr '(1 2 3)) 
=> '(2 3) 

を見てください第例えば同様
(cons '(a b) '(d e f)) 
=> '((a b) d e f) 

:我々は要素'(a b)の残りの部分に最初の要素​​を追加して、我々は3要素のリストを得る:

(cons '(d e f) '(a b)) 
=> '((d e f) a b) 

最後に、上記リストのcarを呼び出すと、その最初の要素が得られます。これは​​であり、明らかに3つの要素を持っています。

(car (cons '(d e f) '(a b))) 
=> '(d e f)