- 189 名前:デフォルトの名無しさん mailto:sage [04/02/21 11:11]
- multiple-value-bind の属性リスト版を書いたんですけど、
どうやったら gensym を使うように改良できますか? 使い方は、(setq alist '((a 2) (b 3))) と代入しておいてから (alist-bind alist (print (+ a b)) (* a b)) を評価すると、 5 を印字してから 6 を返すような関数です。 現状はこんな感じです。 (defmacro alist-bind (alist &body body) (let ((alist-bind-internal-variable (eval alist))) `(multiple-value-bind ,(values (mapcar #'car alist-bind-internal-variable)) ,(cons 'values (mapcar #'cadr alist-bind-internal-variable)) ,@body))) バッククオートを入れ子にして使うのがどうしてもうまくいかなくて ほかと重ならない変数名で逃げてます。実用上は問題ないんですが もっとスマートな解決策はないものでしょうか。
|

|