Common Lisp/外部库/扩展绑定
外观
< Common Lisp | 外部库
Metabang-Bind 将几种不同的词法绑定技术结合到一个设施中。它目前支持的绑定类型包括 LET、DESTRUCTURING-BIND、MULTIPLE-VALUE-BIND、属性列表绑定、结构槽绑定、类槽绑定(可以选择使用访问器)以及数组解构。此外,BIND 还可以通过 CLOS 扩展,因此您可以引入自己的绑定方法。
- http://common-lisp.net/project/metabang-bind/ 主页
- http://common-lisp.net/project/metabang-bind/user-guide.html 用户手册
Anaphora 是一个宏库,它实现了 回指控制结构。回指结构隐式地绑定了前一个结果。此绑定的含义可以通过查看表达式的上下文来找到。例如,从英语来看,考虑句子“拿起球并把它扔掉”。很明显,你永远不会说“拿起球并扔掉球”,因为那样是多余的。然而,大多数计算机语言要求你以这种冗余的方式表达你的想法,例如
(if (pseudo-p)
(print (pseudo-p))
(error "It is not the case that pseudo-p.") )
现在,如果伪谓词 PSEUDO-P 确实计算量很大,你可能不想对它进行两次评估。在这种情况下,你可能会最终绑定原始结果并在以后使用它,就像这样
(let ((result (pseudo-p)))
(if result
(print result)
(error "It is not the case that pseudo-p.") ))
这基本上是回指结构为你带来的全部收益,但它非常方便,并且创建了更接近于你向朋友而不是计算机解释过程的方式的代码。使用 Anaphora,你可以将上面的示例写成
(aif (pseudo-p)
(print it)
(error "It is not the case that pseudo-p.") )
Anaphora 还包括 WHEN、UNLESS、COND、CASE、TYPECASE 以及其他一些的回指版本。
Anaphora 还提供了符号回指结构的概念。在这些宏中,保存的是谓词形式,而不是它的返回值。这意味着 IT 可以充当 SETF 表达式中的一个位置。