Использование `удовлетворяет` с` и `в Common Lisp

Я прочитал в Google Common Lisp Руководство по стилю (см. последний раздел), что в Common Lisp есть ошибка, стандарт относительно and как спецификатор типа. А именно, что это не "короткое замыкание" или эквивалентно, что порядок оценки не гарантируется, вопреки тому, что предполагается в примере :

(and integer (satisfies evenp))

Однако, глядя на раздел 4.4 CLtL2, он заявил, что

Когда typep обрабатывает спецификатор типа and, он всегда проверяет каждый из типов компонентов в порядке слева направо и прекращает обработку, как только будет найден один компонент пересечения, к которому относится данный объект не принадлежат.

В этом разделе далее объясняется, что это так, чтобы позволить satisfies фильтроваться другим типом, чтобы избежать ошибок.

Можно ли смело предположить, что это ошибка в Руководстве по стилю Google или изменилось поведение с CLtL2?

1 ответ

У меня была та же проблема несколько лет назад.

Я ничего не нашел в ANSI CL, который поддерживал бы порядок или фильтрацию. Но также нет вопроса, который обсуждает изменение. Пример, который вы упомянули, предполагает интерпретацию CLtL2.

Таким образом, имеет смысл предположить, что компилятор может изменить порядок типов и что это изменилось с CLtL2.

licensed under cc by-sa 3.0 with attribution.