2

有解构绑定,但似乎没有解构setq。是否可以使用解构绑定来定义它?

(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

这将是一项非常重要的努力。

您需要做的是编写一个lambda-list 分析器,它将

  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 回答