Common Lisp中"flet"和"label"之间有什么区别?

z_a*_*xis 33 common-lisp

它是否setqsetf?相似?flet和之间没有什么大的区别labels

祝商祺!

Ray*_*ger 33

在Common Lisp中,无论是fletlabels做的稍有不同类型的词汇绑定:

  • flet是本地函数绑定的特殊形式.绑定不是递归的,不能相互引用.每个绑定包含函数名称,参数和函数体.

  • labels是本地函数绑定的特殊形式.绑定可以是递归的,并且可以相互引用.每个绑定包含函数名称,参数和函数体.

在Emacs Lisp中,有一点不同.该标签的形式是像FLET,不同之处在于它使函数名的词法绑定,而不是动态绑定.

  • flet比标签的一个优点是,如果你用flet定义一个函数`foo`,它可以引用包含范围中另一个名为`foo`的函数,而使用标签则引用它自己. (16认同)
  • 问题是关于Common Lisp,*不是*Emacs Lisp.删除第一段会很好,因为它会引起混淆.有许多Lisp方言 - 这个问题是关于Common Lisp. (6认同)