例如,
(cond ((< 2 1) 2 )((< 1 2 ) 1)) 的值为 1。OK;
但是,我在我的主要著作中看到这(cond (diverge 1) (ture 0))
是未定义的,如果分歧没有终止。
lisp的分歧是什么?
我不知道。
另外,我不确切知道 lisp 的副作用是什么。
例如,
(cond ((< 2 1) 2 )((< 1 2 ) 1)) 的值为 1。OK;
但是,我在我的主要著作中看到这(cond (diverge 1) (ture 0))
是未定义的,如果分歧没有终止。
lisp的分歧是什么?
我不知道。
另外,我不确切知道 lisp 的副作用是什么。
假设您最初的意思是
(cond ((diverge 1) (ture 0)))
diverge
那么当我们假设它是一个 - 正如它的名字所暗示的 - 发散操作时,该表达式的结果是未定义的(或者更好的是,发散的) 。
发散操作是不收敛到结果的操作,例如无限循环。
Common Lisp 标准中没有diverge
定义(它有什么实际用途?),所以你的书只是省略了发散计算的“实现细节”,将它包装在一个操作中并适当地命名它。
请注意,如果假定diverge
为符号宏,则原始代码可以公开相同的行为。
如图所示,diverge
并将ture
命名为布尔值的变量。如果为真,则整个表达式的值为 1,如果diverge
为真,则为 0 ture
,nil
如果两者都不为真。
由于您没有显示上下文,尤其是如何绑定diverge
和ture
绑定,因此无法对您的代码段进行更多说明。
也许你的意思是(cond ((diverge 1) (ture 0)))
. 然后diverge
将是一个操作员。Common Lisp 标准中没有定义它,所以它很可能来自你书中的其他地方。