6

私の質問は次のコードに関連しています:

 (define (cons. x y)
   (lambda (m) (m x y)))

 (define (car. z)
   (z (lambda (p q) p)))

私の問題は、このコードが実際にどのように機能するかです。私が理解できる限り、短所。スコープ内に変数 x と y を含むプロシージャを返しています。車。次に、cons から返された手続きを取ります。2 つの引数 p と q を取り、p を返す別のラムダにそれを適用します。私の混乱はその 2 番目のラムダにあります。P と Q の値は正確にどこから来るのでしょうか?

4

1 に答える 1

7

変数pqは「consセル」の2つの要素です。つまり、xyでありcons.ます。を実行する(car. (cons. 1 2))と、次のようになります(展開cons.):

(car. (lambda (m) (m 1 2))

これは(の定義を使用してcar.)になります:

((lambda (m) (m 1 2)) (lambda (p q) p))

引数を最初の本体に差し込むと、次lambdaのようになります。

((lambda (p q) p) 1 2)

そのような別の置換1により、「consセル」の最初の要素が得られます。

于 2011-02-08T04:48:36.827 に答える