Lisp 什么';口齿不清

Lisp 什么';口齿不清,lisp,conditional,conditional-expressions,Lisp,Conditional,Conditional Expressions,比如说, (条件((

比如说,

(条件((<21)2)(<12)1)) 值为1。嗯,

但是,我在我的专业书中看到,
(cond(diverge 1)(真0))
是未定义的,如果diverge没有终止的话

口齿不清中的分歧是什么

我不知道


另外,我不知道lisp中的副作用到底是什么。

如图所示,
diverse
ture
将命名为布尔值的变量。如果
diverge
为真,则整个表达式的值为1;如果
ture
为真,则整个表达式的值为0;如果两者都不为真,则整个表达式的值为
nil

由于您没有显示上下文,特别是
分歧
真实
是如何绑定的,因此无法对您的代码片段进行更多说明


也许你的意思是
(cond((分歧1)(真值0))
。然后,
diverge
将成为操作员。它没有在通用Lisp标准中定义,因此它很可能来自您的书中的其他地方。

如图所示,
发散
将命名为布尔值的变量。如果
diverge
为真,则整个表达式的值为1;如果
ture
为真,则整个表达式的值为0;如果两者都不为真,则整个表达式的值为
nil

由于您没有显示上下文,特别是
分歧
真实
是如何绑定的,因此无法对您的代码片段进行更多说明


也许你的意思是
(cond((分歧1)(真值0))
。然后,
diverge
将成为操作员。它没有在通用Lisp标准中定义,因此它很可能来自您的书中的其他地方。

假设您最初使用的代码是

(cond ((diverge 1) (ture 0)))
当我们假设
diverge
是一个发散操作时,该表达式的结果是未定义的(或者更好,也是发散的)

A是一个不会收敛到某个结果的结果,例如无限循环

公共Lisp标准中没有定义分歧(它有什么实际用途?),因此您的书只是通过将分歧计算包装在操作中并对其进行适当命名,从而省略了分歧计算的“实现细节”


请注意,如果假定
发散
是一个符号宏,则原始代码可能会公开相同的行为。

假定您最初的意思是

(cond ((diverge 1) (ture 0)))
当我们假设
diverge
是一个发散操作时,该表达式的结果是未定义的(或者更好,也是发散的)

A是一个不会收敛到某个结果的结果,例如无限循环

公共Lisp标准中没有定义分歧(它有什么实际用途?),因此您的书只是通过将分歧计算包装在操作中并对其进行适当命名,从而省略了分歧计算的“实现细节”


请注意,如果假定
发散
为符号宏,则原始代码可能会暴露相同的行为。

OP的代码可能有效,并且永远不会终止,前提是存在类似于
(定义符号宏发散(循环))
的内容;-)啊,是的,符号宏。我想保持低复杂性,但添加了一个注释:)OP的代码可能是有效的,并且永远不会终止,只要有类似于
(定义符号宏发散(循环))
的内容;-)啊,是的,符号宏。我想保持低复杂性,但添加了一条注释:)