演習として、let を次のようなラムダ関数として定義しようとしています。
(define let_as_lambda
(lambda (var)
(lambda (value body)
(var body) val)))
そして、私はそれを次のように呼ぶことを望んでいます:
((let_as_lambda a) (3 (+ a 2)))
ただし、バインドされていない変数 (この場合は "a") を引数として関数に渡す方法はありません。(少し奇妙に見えますが、関数を返すには let_as_lambda(var) が必要です。)
誰でもこれを行う方法を教えてもらえますか? アドバイスをいただければ幸いです。
実際、このラムダに相当する式を使用するだけです:
(let ((p1 v1) (p2 v2)...) body) = ((lambda (p1 p2...) body) v1 v2...)
これを機能させることさえできません:
(define let_as_lambda
(lambda (var val body)
((var body) val)))
呼び出し元:(let_as_lambda a 3 (+ a 2))
同じ苦情を受けずに:
定義前の識別子への参照: a