Common Lisp中,“flet”和“labels”的区别是什么?

43

这是否类似于 setqsetffletlabels 之间没有太大的区别吗?

此致敬礼!

1个回答

42

在Common Lisp中,fletlabels都可以进行词法绑定,但它们略有不同:

  • flet是一种用于局部函数绑定的特殊形式。 绑定不是递归的,也不能相互引用。每个绑定包含函数名称、参数和函数体。

  • labels是一种用于局部函数绑定的特殊形式。 绑定可以是递归的,并且可以相互引用。每个绑定包含函数名称、参数和函数体。

在Emacs Lisp中,稍有不同。 labels形式与flet类似,但它会对函数名称进行词法绑定而不是动态绑定。


20
与labels相比,flet的一个优点是,如果你使用flet定义一个函数foo,它可以引用包含范围内另一个名为foo的函数,而对于labels它会引用自身。 - Samuel Edwin Ward
7
这个问题明确是关于Common Lisp而不是Emacs Lisp。最好删除第一段,以免造成混淆。有许多Lisp方言 - 这个问题是关于Common Lisp的。 - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接