Schemeのトリッキーなラムダ式に問題があり、インタープリターによってどのように評価されているかを確認したいと思います。
SICPセクション1.1.5「プロシージャアプリケーションの置換モデル」に示されているように、Schemeインタプリタにすべての評価ステップを印刷してもらいたい。
スキームインタープリターを使用した解決策を探しています。私はすでにRacketのトレースを試しましたが、すべての式ではなく、プロシージャ呼び出しのみをトレースします。
やる気を起こさせる例
SICP演習2.6からのチャーチ数の定義を考えると:
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
とタスク:
直接定義
one
します(とではありません)。two
zero
add-1
との評価結果one
との定義を確認したいと思います。two
(add-1 zero)
(add-1 (add-1 zero))
これは、Schemeインタープリターに印刷してもらいたいものです。
> (add-1 zero)
(add-1 (lambda (f) (lambda (x) x)))
(lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x)) f) x))))
(lambda (f) (lambda (x) (f ((lambda (x) x) x))))
(lambda (f) (lambda (x) (f x)))
>