誰かが私に理由を説明してもらえますか:
(define a (lambda() (cons a #f)))
(car (a)) ==> procedure
((car (a))) ==> (procedure . #f)
私はそれを理解していないと思います。ありがとう
これ
(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)
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