3

誰かが私に理由を説明してもらえますか:

(define a (lambda() (cons a #f)))

(car (a)) ==> procedure

((car (a))) ==> (procedure . #f)

私はそれを理解していないと思います。ありがとう

4

2 に答える 2

2

これ

(define a (lambda() (cons a #f)))

a呼び出されるとペアを返すプロシージャ を定義します

(<the procedure a> . #f)

つまり、carはプロシージャ自体であり、cdr#fです。

つまり、評価した結果

(a)

上記の定義により、引数なしでプロシージャを呼び出した結果です。aa

(<the procedure a> . #f)

したがって、

(car (a))

です(「評価結果で<the procedure a>呼び出す」という意味なので)car(a)

別の括弧のペアを追加すると

((car (a)))

そのプロシージャを呼び出していますが、これはプロシージャであるためa、 と同じ結果を返します(a)

 (<the procedure a> . #f)
于 2014-12-15T14:18:00.307 に答える
1

definefrom top level はグローバル変数を定義しますa

無名プロシージャ(lambda() (cons a #f)は、呼び出されると、 と の評価からペアを作成しaます#f

評価aすると、手順が取得されます。私のシステムでは、#<procedure:a>.

評価(a)すると が得られ(#<procedure:a> . #f)ます。現在、プロシージャの表示方法は実装に大きく依存しています。標準はありませんが、多くの人は名前aが存在する場合に慣例を使用しますが、それを当てにしないでください。

呼び出しの結果のaとしてもアクセスできるので、 と同じものを取得できます。ですので。cara((car (a)))(a)(eq? a (car (a)))#t

于 2014-12-15T10:05:25.707 に答える