2012-02-02 77 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