首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >总是喜欢标签而不是flet?

总是喜欢标签而不是flet?
EN

Stack Overflow用户
提问于 2015-04-04 10:32:00
回答 1查看 255关注 0票数 3

在Lisp中,我们有两个函数来定义本地函数,fletlabels。两者基本上都是一样的,它们都有相同的语法,它们唯一的(?)不同的是,对于labels,本地函数可以相互引用,而使用flet,它们不能引用。

有什么好的理由使用flet吗?换句话说:为什么不总是使用labels,完全摆脱flet呢?

据我所见,flet只是labels的95%的子集。我有遗漏什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-04 12:03:08

fletlabels都不是函数。他们是特殊的,内置的,操作员。

FLET是一个简单的构造。定义的局部函数仅在正文中可见。LABELS允许我们定义递归本地函数和相互递归的本地函数。

代码语言:javascript
运行
复制
CL-USER 7 > (let ((i 5))
              (labels ((foo ()
                         (decf i) (bar))
                       (bar ()
                         (unless (zerop i)
                           (print i)
                           (foo))))
                (foo)))

4 
3 
2 
1 
NIL

因此,默认情况下使用更简单的FLET 是很好的风格。

然后,LABELS的使用表明本地函数使用递归。然后,通过读取LABELSFLET,可以看到本地函数是否使用递归。

他们唯一的(?)不同之处在于,使用标签,本地函数可以相互引用,而flet则不能。

flet中定义的函数也不能直接调用自己。因此,可以重新定义外部(可能是全局)函数,并在定义中使用外部函数。

一般来说,在用户代码中不使用它是个好主意,因为它会使代码更难理解。在生成的代码中可能很有用..。有时候。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29445358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档