可以“康德”完全替换“if”声明?
我知道“cond”是基于“if”的,但是“cond”可以做“if”能做的所有事情吗? 谢谢
I know 'cond' is based off 'if', but can 'cond' do everything 'if' can do?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的。任何
使用
if
的条件都可以转换为使用cond
的等效条件:例如,考虑以下情况:
上面的代码可以转换为:
Yes. Any conditional
using
if
can be transformed into an equivalent conditional usingcond
:For example, consider the following:
The above code can be transformed into:
“if”很可能被实现为围绕“cond”的宏。 “cond”是这里实际的“原语”,而不是“if”。
"if" may well be implemented as a macro around "cond". "cond" is the actual "primitive" here, not "if".
根据您所处理的 Lisp,
if
和cond
肯定并不总是可以互换。这是一个测试来找出答案。我给出的结果来自 MIT 的(2014)Scheme 解释器。测试
我们可以设计一个使用
cond
实现的new-if
方法:我们可以使用 old-if 和 new-if 尝试以下操作:
(recursive-func 0 1)
=> 1
并使用
new-if
:(recursive-func 0 1)
=>; ;中止!:超出最大递归深度
Depending on which lisp you're dealing with,
if
andcond
are definitely not always interchangeable. Here's a test to find out. The results I give are from MIT's (2014) Scheme interpreter.Test
We may design a
new-if
method made usingcond
:We may try the following with the old-if and the new-if:
(recursive-func 0 1)
=> 1
And with
new-if
:(recursive-func 0 1)
=> ;Aborting!: maximum recursion depth exceeded