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)))
バッククオートを入れ子にして使うのがどうしてもうまくいかなくて
ほかと重ならない変数名で逃げてます。実用上は問題ないんですが
もっとスマートな解決策はないものでしょうか。