0

演習として、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

4

1 に答える 1

4

letに関して定義された構文拡張ですlambda。関数として定義できないと思います。The Scheme Programming Languageの例を見てください。

于 2011-02-21T00:50:57.450 に答える