【问题标题】:Using `satisfies` with `and` in Common Lisp在 Common Lisp 中使用 `satisfies` 和 `and`
【发布时间】:2015-04-21 10:00:49
【问题描述】:

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

(and integer (satisfies evenp))

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

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

该部分进一步解释了这样做,正是为了允许satisfies被另一种类型过滤,以避免错误。

我可以安全地认为这是 Google 样式指南中的一个错误,还是自 CLtL2 以来行为发生了变化?

【问题讨论】:

    标签: types lisp common-lisp cltl2


    【解决方案1】:

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

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

    因此,假设编译器可以重新排序类型并且这已从 CLtL2 发生变化是有意义的。

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2020-12-18
      • 2020-09-18
      相关资源
      最近更新 更多