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
问题:
在Common Lisp的,AND和OR布尔值,而不是二进制数字操作.NIL是唯一的假值,其他任何东西都被认为是真的.
要在号码,使用的二进制表示操作LOGAND,LOGIOR等等,这些都记录在http://clhs.lisp.se/Body/f_logand.htm.
(logand 1 8) ==> 0
Run Code Online (Sandbox Code Playgroud)
在编程语言通常有两种类型的and和or运营商.条件运算符被调用&&,||在Algol语言中,在Common Lisp中,它们被称为and和or.另一方面算术运算符&,并且|具有CL等价物logand和logior.
在Common Lisp中,每个值都是布尔值,除了nil每个其他值都被视为真值.Perl是非常相似的,除了它有几个假值的,但是1和8在两种语言的真正价值:
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)