跳转到内容

Common Lisp/外部库/扩展绑定

来自维基教科书,开放的书籍,开放的世界

使用 Metabang-Bind 绑定

[编辑 | 编辑源代码]

Metabang-Bind 将几种不同的词法绑定技术结合到一个设施中。它目前支持的绑定类型包括 LET、DESTRUCTURING-BIND、MULTIPLE-VALUE-BIND、属性列表绑定、结构槽绑定、类槽绑定(可以选择使用访问器)以及数组解构。此外,BIND 还可以通过 CLOS 扩展,因此您可以引入自己的绑定方法。

进一步阅读

[编辑 | 编辑源代码]

使用 Anaphora 的回指宏

[编辑 | 编辑源代码]

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 表达式中的一个位置。

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书