2012-02-02 74 views

回答

30

Common Lisp中,既fletlabels使稍有不同類型的詞彙綁定:

  • flet是當地的功能結合的一種特殊形式。 綁定不是遞歸的,不能互相引用。每個綁定都包含函數名稱,參數和函數體。

  • labels是本地函數綁定的特殊形式。 綁定可以是遞歸的,可以互相引用。每個綁定都包含函數名稱,參數和函數體。

在Emacs Lisp中,有一個小的差異。 標籤表單與flet類似,只不過它使功能名稱的詞彙綁定而不是動態綁定。

+12

flet over標籤的一個優點是,如果你用flet定義一個函數'foo',它可以在包含範圍內引用另一個名爲'foo'的函數,而帶有標籤的引用將會引用它自己。 – 2012-02-23 21:40:05

+6

這個問題明確的是關於Common Lisp,*而不是Emacs Lisp。刪除第一段會很好,因爲這可能會導致混淆。有很多Lisp方言 - 這個問題是關於Common Lisp的。 – Drew 2015-03-08 17:55:51