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

(and integer (satisfies evenp))

但是,查看CLtL2的section 4.4时,它表示



并且本节进一步说明,正是这样,才允许satisfies被另一种类型过滤,从而避免错误。

我可以安全地认为这是《 Google风格指南》中的错误,还是自CLtL2起已更改了行为?

最佳答案

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

我在ANSI CL中找不到支持顺序或过滤的内容。但是也没有讨论变化的问题。您提到的示例假定使用CLtL2解释。

因此,有理由假设编译器可以对类型进行重新排序,并且这已经从CLtL2更改了。

关于types - 在Common Lisp中将 `satisfies`与 `and`一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29768959/

10-13 07:36