を理解されたいですrest
とも呼ばれる)は、リストの残りの部分(つまり、別のリスト)か、リストを終了するアトムのいずれかです。従来のターミネータは空のリスト()
です。 ()
で終わるリストは「適切なリスト」と呼ばれます。他の原子によって終了されたリストは、「不適切なリスト」と呼ばれます。リスト(1 2 3 4 5)
には、要素1,2,3,4、および5が含まれ、終了は()
です。システムプリントコンス・セルは、一般的なケースは、例えば
(car . cdr)
によってそれを印刷するときに、今
(cons 1 (cons 2 (cons 3 (cons 4 (cons 5())))))
ことによってそれを構築することができ、(cons 1 2)
の結果は
として印刷されます
(1 . 2)
リストはコンスセルで構築されているので、あなたもリストにこの表記を使用することができます。
ほとんどのLisp(私の知っていることすべてが)コンスセルを印刷するための特殊なケースを持っているので、しかし、むしろ不格好だ
'(1 2 3 4 5) ==
'(1 . (2 . (3 . (4 . (5 .())))))
:cdr
リスト(別のコンス・セル、または()
のいずれか)である場合には、「ドン.
を印刷し、cdr
の囲み括弧を印刷しないでください(リストであるため)。あなたは
(1 2 3 . 4)
のような結果を見ているのであれば、それはあなたが原子4
で終了し、不適切なリストを持っていることを意味します。それは構造を持っています
(1 . (2 . (3 . 4)))
ここであなたのコードではリストの作成は失敗しましたか?..
は、常に適切なリストを返すことになって、それでは例を見てみましょうされています。最初の場合は、必ず適切なリスト(空のリスト)を返します:
((> (add1 start) stop) (quote()))
それはない何かを返すことができるように第二ケースが見えますリスト((sub1 stop) == (- stop 1)
があると仮定):..
が正常に機能している場合
((eq? (add1 start) stop) (sub1 stop))
さて、第3の場合は、常に(y
がある場合(cons x y)
が適切なリストであるため)適切なリストを返すことになります。
(else (cons start (.. (add1 start) stop)))
2番目のケースがリストを返すようにしてください。すべての設定が必要です。
あなたは '(.. 1 2)'を実行するときに 'cond'の中のどのケースが使われますか?それは何を返すのですか? – Barmar