2

destructuring-bind はありますが、destructuring-setq はないようです。destructuring-bind を使用して定義することは可能ですか?

(let (a b c d)
  (destructuring-setq ((a b) (c d)) '((1 2) (3 4)))
  `(,b ,d))

(destructuring-bind
    ((a b) (c d)) '((1 2) (3 4))
  `(,b ,d))
4

1 に答える 1

3

これは非常に重要な試みです。

あなたがしなければならないことは、ラムダリストアナラ​​イザー 書くことです

  1. バインドするすべての変数を見つける
  2. それらをgensymに置き換え(またはcopy-symbol、マクロ展開を完全に読みにくくするために使用します :-)、古いシンボルから新しいシンボルへのマップを保持します。

次のようなものを返します

(destructuring-bind (new-lambda-list)
     expression
   (setq old-var-1 new-gensym-1 ...))

アナライザーは、どの Common Lisp 実装にも存在し (上記のリンクなどを参照)、単純ではありません。

本当に十分destructuring-bindではないかどうかを自問することをお勧めします。

于 2013-09-22T19:59:45.063 に答える