廣義布林

實際上,任何與 NIL 不同的值都被認為是 Common Lisp 中的值。例如:

CL-USER> (let ((a (+ 2 2)))
           (if a
               a
               "Oh my! 2 + 2 is equal to NIL!"))
4

這個事實可以與布林運算子結合使用,使程式更簡潔。例如,上面的例子相當於:

CL-USER> (or (+ 2 2) "Oh my! 2 + 2 is equal to NIL!")
4

巨集 OR 按從左到右的順序計算其引數,並在找到非 NIL 值後立即停止,並返回它。如果所有這些都是 NIL,則返回的值為 NIL

CL-USER> (or (= 1 2) (= 3 4) (= 5 6))
NIL

類似地,巨集 AND 從左到右評估其引數並返回最後一個的值,如果所有這些都被評估為非 NIL,否則一旦找到 NIL 就停止評估,返回它:

CL-USER> (let ((a 2)
               (b 3))
           (and (/= b 0) (/ a b)))
2/3
CL-USER> (let ((a 2)
               (b 0))
           (and (/= b 0) (/ a b)))
NIL

由於這些原因,ANDOR 可以被認為更類似於其他語言的控制結構,而不是布林運算子。