在Common Lisp中用`和`使用`satisfies`

时间:2015-04-21 10:00:50

标签: types lisp common-lisp cltl2

我在Google Common Lisp Style Guide中读到(参见最后一节),Common Lisp标准中有一个关于and作为类型说明符的错误。也就是说,它不会“短路”,或等效地评估评估顺序,与example中假设的相反:

(and integer (satisfies evenp))

但是,看一下CLtL2的section 4.4,就说明了

  

typep处理and类型说明符时,它始终按从左到右的顺序测试每个组件类型,并在找到交集的一个组件后立即停止处理有问题的对象不属于。

该部分进一步说明了这一点,正是为了允许satisfies被其他类型过滤,以避免错误。

我可以安全地假设这是Google样式指南中的错误,或者自CLtL2以来行为是否已更改?

1 个答案:

答案 0 :(得分:8)

几年前我遇到了同样的问题。

我在ANSI CL中找不到任何支持订单或过滤的内容。但是也没有讨论变更的问题。您提到的示例假设CLtL2解释。

因此,假设编译器可能会对类型进行重新排序并且已从CLtL2更改它是有意义的。