0

例如,

(cond ((< 2 1) 2 )((< 1 2 ) 1)) 的值为 1。OK;

但是,我在我的主要著作中看到这(cond (diverge 1) (ture 0))是未定义的,如果分歧没有终止。

lisp的分歧是什么?

我不知道。

另外,我不确切知道 lisp 的副作用是什么。

4

2 回答 2

4

假设您最初的意思是

(cond ((diverge 1) (ture 0)))

diverge那么当我们假设它是一个 - 正如它的名字所暗示的 - 发散操作时,该表达式的结果是未定义的(或者更好的是,发散的) 。

发散操作是不收敛到结果的操作,例如无限循环。

Common Lisp 标准中没有diverge定义(它有什么实际用途?),所以你的书只是省略了发散计算的“实现细节”,将它包装在一个操作中并适当地命名它。

请注意,如果假定diverge为符号宏,则原始代码可以公开相同的行为。

于 2016-03-28T07:04:53.797 回答
2

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

由于您没有显示上下文,尤其是如何绑定divergeture绑定,因此无法对您的代码段进行更多说明。

也许你的意思是(cond ((diverge 1) (ture 0))). 然后diverge将是一个操作员。Common Lisp 标准中没有定义它,所以它很可能来自你书中的其他地方。

于 2016-03-27T08:01:23.873 回答