define-syntax-rule
リストを引数として受け入れ、リスト(単一の要素の場合は引用符)をラムダの本体として受け入れるにはどうすればよいでしょうか。私は次のようなことをしたいと思います:
>(define a (lambdarize '(x y z) '(+ x y z)))
#<procedure>
>(a 1 2 3)
6
>(define b (lambdarize '(x) 'x))
#<procedure>
>(b 1)
1
と をいじってみましたが、define-syntax-rule
それ自体はプロシージャではなくマクロのように見えるため、見つけようとして困惑しました...apply
lambda
eval
ああ...そして、それは悪質なので、使用しないソリューションが欲しいです...
アップデート
答えてくれてありがとう、ライアン...それはほとんどそれでした! =) eval の問題は、現在のスコープをキャッチするのがうまくいかないことでした...このようにして、次のようなことができます
(let ([a 1])
(begin
(defmethod add ((x integer?) (y integer?)) (+ x y a))
(add 1 2)
)
これはevalで惨めに失敗します...これは単なる学術的な例ですが、正しさの良いテストだと思います.