2

(cons 1 2)を与えてくれ(1 . 2)ます。

(cons 3 4)を与えてくれ(3 . 4)ます。

では、なぜ が(cons (cons 1 2) (cons 3 4))私たちに を与えるのでしょ((1 . 2) 3 . 4)うか? なぜそうではないの((1 . 2) (3 . 4))ですか?

4

1 に答える 1

5

((1 . 2) (3 . 4))それは、それぞれがコンス ペアである 2 つの要素を含むリストになるからではありません。私はあなたが何を意味していたと思います:なぜそうではないの((1 . 2) . (3 . 4))ですか?

実際、次の 2 つの式は同等です。

'((1 . 2) . (3 . 4))
'((1 . 2) 3 . 4)

これは、Scheme のドット表記が適切なリストの表現とどのように連携して機能するかに関係しています。これを覚えておいてください:

'(1 . (2 . (3 . (4 . ()))))

...次のように単純に出力されます。

(1 2 3 4)

ただし、これは次のとおりです。

'(1 . (2 . (3 . 4)))

...次のように出力されます。

(1 2 3 . 4)

Scheme はできる限り簡略化されたリスト表記法を使用しようとすることに注意してください — 要素としてペアまたは空のリストを持たないペアに到達した場合にのみ、明示的なドット付けにフォールバックしcdrます。

したがって、元の例では、そのコンス ペアの 2 番目の要素はペアであるため、Scheme はリスト表記を使用します。これにより、2 番目の括弧のセットと余分なドットが削除され、遭遇した結果が得られます。

于 2015-02-09T02:25:14.693 に答える