Lisp - 逻辑运算符
Lisp - Logical operators
我是 Lisp 的新手,所以这可能很简单,但无论如何我都很想知道这个。
我熟悉 AND 和 OR 等逻辑运算符,但 lisp 的行为似乎与预期不符。
例如,对于 (and 1 8)
预期:
1 => 0 0 0 1
8 => 1 0 0 0
(and 1 8) => 0 0 0 0
收到:
所以,答案应该是 0
...而是 8
问题:
- 这个计算在 LISP 中是如何完成的?
- 是逻辑运算符
LISP 有根本不同?
在 Common Lisp 中,AND
和 OR
对布尔值而不是二进制数字进行运算。 NIL
是唯一的错误值,其他任何值都被认为是正确的。
要对数字的二进制表示进行操作,请使用 LOGAND
、LOGIOR
等。这些都记录在 http://clhs.lisp.se/Body/f_logand.htm。
(logand 1 8) ==> 0
在编程语言中通常有两种运算符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
CL 中相同
(and 1 8) ; ==> 8
(logand 1 8) ; ==> 0
(or 1 8) ; ==> 1
(logior 1 8) ; ==> 9
我是 Lisp 的新手,所以这可能很简单,但无论如何我都很想知道这个。
我熟悉 AND 和 OR 等逻辑运算符,但 lisp 的行为似乎与预期不符。
例如,对于 (and 1 8)
预期:
1 => 0 0 0 1
8 => 1 0 0 0
(and 1 8) => 0 0 0 0
收到:
所以,答案应该是 0
...而是 8
问题:
- 这个计算在 LISP 中是如何完成的?
- 是逻辑运算符 LISP 有根本不同?
在 Common Lisp 中,AND
和 OR
对布尔值而不是二进制数字进行运算。 NIL
是唯一的错误值,其他任何值都被认为是正确的。
要对数字的二进制表示进行操作,请使用 LOGAND
、LOGIOR
等。这些都记录在 http://clhs.lisp.se/Body/f_logand.htm。
(logand 1 8) ==> 0
在编程语言中通常有两种运算符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
CL 中相同
(and 1 8) ; ==> 8
(logand 1 8) ; ==> 0
(or 1 8) ; ==> 1
(logior 1 8) ; ==> 9