在口齿不清中有什么不同

时间:2016-03-27 04:16:18

标签: lisp conditional conditional-expressions

例如,

  

(cond((< 2 1)2)((< 1 2)1))    有价值1.好的;

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

lisp的分歧是什么?

我不知道。

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

2 个答案:

答案 0 :(得分:4)

假设您最初的代码是

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

然后当我们假设diverge是 - 顾名思义 - 分歧操作时,该表达式的结果是未定义的(或更好,也是分歧)。

diverging operation是一个不收敛于结果的结果,例如无限循环。

Common Lisp标准中没有定义diverge(它有什么实际用途?),所以你的书只是省略了实施细节"通过将其包装在一个操作中并适当地命名它来进行分歧计算。

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

答案 1 :(得分:2)

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

由于您没有显示上下文,尤其是divergeture的约束方式,因此无法更多地了解您的代码段。

也许你的意思是(cond ((diverge 1) (ture 0)))。然后diverge将成为运营商。它没有在Common Lisp标准中定义,所以它很可能来自你书中的其他地方。