跳轉到內容

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

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書