boolean - Common Lisp中是否有非延迟评估的 "and"或 "or"操作?

标签 boolean common-lisp lazy-evaluation

Common Lisp中常用的andor运算符会延迟计算其操作数,例如一旦遇到第一个andnil就会停止。我正在寻找一个不能以这种方式工作的运算符,而是总是在返回结果之前对所有操作数求值。有这样的东西吗?

例如,在C语言中,您有惰性&&和按位的&,它们可以用作非惰性替代。
我知道logandbit-and,但是它们不适用于 boolean 操作数。

例如。:

(and NIL (not-defined))

不会抛出错误,但是我希望它抛出一个错误。

最佳答案

(defun and* (&rest l)
  (every #'identity l))

或返回最后一个值(如果全部为true)
(defun and& (&rest l)
  (or (null l)
      (loop for b in l
            unless b
              do (return nil)
            finally (return b))))

或者
(defun and& (&rest l)
  (or (null l)
      (loop for b in l
            always b
            finally (return b))))

关于boolean - Common Lisp中是否有非延迟评估的 "and"或 "or"操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57478184/

相关文章:

javascript - 迭代 boolean 值的二维数组并返回基于 true/false 的递增值

F# 惰性求值 vs 非惰性求值

c# - 在初始化惰性实例时将参数传递给构造函数

haskell - 在惰性函数式语言的模板实例化求值器中实现 `case` 表达式有困难吗?

c# - 将 ToggleButton 绑定(bind)到 boolean 值

python - 在由切片和两个 boolean 数组索引的 numpy 数组中设置值

java - 我将如何将 boolean 字符串更改为 JTable 中的 JCheckBox?

LISP 条件编程

common-lisp - Quicklisp:使用加载的库

layout - 在 Lisp 中打印列中的嵌套列表