例如,
(cond((< 2 1)2)((< 1 2)1)) 有价值1.好的;
但是,我看到(cond (diverge 1) (ture 0))
未定义,如果在我的主要书中没有终止'。
lisp的分歧是什么?
我不知道。
另外,我不确切知道lisp中的副作用是什么。
答案 0 :(得分:4)
假设您最初的代码是
(cond ((diverge 1) (ture 0)))
然后当我们假设diverge
是 - 顾名思义 - 分歧操作时,该表达式的结果是未定义的(或更好,也是分歧)。
diverging operation是一个不收敛于结果的结果,例如无限循环。
Common Lisp标准中没有定义diverge
(它有什么实际用途?),所以你的书只是省略了实施细节"通过将其包装在一个操作中并适当地命名它来进行分歧计算。
请注意,如果假设diverge
为符号宏,原始代码可能会暴露相同的行为。
答案 1 :(得分:2)
如图所示,diverge
和ture
将命名被评估为布尔值的变量。如果diverge
为真,则整个表达式的值为1;如果ture
为真,则为0,如果两者都不为,则为nil
。
由于您没有显示上下文,尤其是diverge
和ture
的约束方式,因此无法更多地了解您的代码段。
也许你的意思是(cond ((diverge 1) (ture 0)))
。然后diverge
将成为运营商。它没有在Common Lisp标准中定义,所以它很可能来自你书中的其他地方。