Lisp - 逻辑运算符

Nav*_*nis 6 lisp functional-programming common-lisp logical-operators

我是Lisp的新手,所以这可能很简单,但我很想知道这一点.

我熟悉AND和OR之类的逻辑运算符,但lisp似乎没有按预期运行.

例如,For (and 1 8)

预期:

1 => 0 0 0 1
8 => 1 0 0 0
(and 1 8) => 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

收到: 所以,答案应该是0 ...但反而是8

问题:

  1. 如何在LISP中完成此计算?
  2. 逻辑运算符在LISP中根本不同吗?

Bar*_*mar 9

在Common Lisp的,ANDOR布尔值,而不是二进制数字操作.NIL是唯一的假值,其他任何东西都被认为是真的.

要在号码,使用的二进制表示操作LOGAND,LOGIOR等等,这些都记录在http://clhs.lisp.se/Body/f_logand.htm.

(logand 1 8) ==> 0
Run Code Online (Sandbox Code Playgroud)


Syl*_*ter 5

在编程语言通常有两种类型的andor运营商.条件运算符被调用&&,||在Algol语言中,在Common Lisp中,它们被称为andor.另一方面算术运算符&,并且|具有CL等价物logandlogior.

在Common Lisp中,每个值都是布尔值,除了nil每个其他值都被视为真值.Perl是非常相似的,除了它有几个假值的,但是18在两种语言的真正价值:

1 && 8 # ==> 8
1 & 8  # ==> 0
1 || 8 # ==> 1
1 | 8  # ==> 9
Run Code Online (Sandbox Code Playgroud)

在CL中也是如此

(and 1 8)    ; ==> 8
(logand 1 8) ; ==> 0
(or 1 8)     ; ==> 1
(logior 1 8) ; ==> 9
Run Code Online (Sandbox Code Playgroud)