OR/AND 对 Racket 中列表的操作
OR/AND operation on lists in Racket
我想了解 and
和 or
在 Racket 中与列表一起使用时代表什么。当我做这样的事情时 -
> (or `(1 2) `(1 3))
'(1 2)
结果代表什么?我想当我们使用 or 和两个列表时,我们会得到列表的并集。这显然不是这里发生的事情。所以,我认为它被解释为布尔值,这就是为什么 `(1 2) 不是假值。因此,结果是`(1 2)。但是这个呢? -
> (and `(1 2) `(1 3))
'(1 3)
我该如何证明这一点?
or
正在寻找第一个真值,从左到右检查参数。 #false
以外的每个值都是真实的。如果找到任何内容,则会 returned。在您的示例中,'(1 2)
是从左边开始的第一个真值,因此它是 returned.
Or
调用时没有参数 returns #false
,因为没有找到真值:
> (or)
#f
And
检查是否所有值都为真,因此它必须检查所有值,从左到右,并且它可以 return #false
(如果有 #false
被发现)或者,如果所有值都是真实的,最后一个。在您的示例中,'(1 3)
是最后一个真值,因此它是 returned.
And
调用时没有参数 returns #true
,因为没有找到 #false
:
> (and)
#t
顺便说一句,'
和`
是有区别的。第一个是 quote
, the second one is quasiquote
。在这个例子中,这并不重要,但您应该知道它们之间的区别。
如果您真的在寻找联合函数,请检查 racket/set
library:
(require racket/set)
(set-union (set 1 2) (set 1 3))
=> (set 1 3 2)
我想了解 and
和 or
在 Racket 中与列表一起使用时代表什么。当我做这样的事情时 -
> (or `(1 2) `(1 3))
'(1 2)
结果代表什么?我想当我们使用 or 和两个列表时,我们会得到列表的并集。这显然不是这里发生的事情。所以,我认为它被解释为布尔值,这就是为什么 `(1 2) 不是假值。因此,结果是`(1 2)。但是这个呢? -
> (and `(1 2) `(1 3))
'(1 3)
我该如何证明这一点?
or
正在寻找第一个真值,从左到右检查参数。 #false
以外的每个值都是真实的。如果找到任何内容,则会 returned。在您的示例中,'(1 2)
是从左边开始的第一个真值,因此它是 returned.
Or
调用时没有参数 returns #false
,因为没有找到真值:
> (or)
#f
And
检查是否所有值都为真,因此它必须检查所有值,从左到右,并且它可以 return #false
(如果有 #false
被发现)或者,如果所有值都是真实的,最后一个。在您的示例中,'(1 3)
是最后一个真值,因此它是 returned.
And
调用时没有参数 returns #true
,因为没有找到 #false
:
> (and)
#t
顺便说一句,'
和`
是有区别的。第一个是 quote
, the second one is quasiquote
。在这个例子中,这并不重要,但您应该知道它们之间的区别。
如果您真的在寻找联合函数,请检查 racket/set
library:
(require racket/set)
(set-union (set 1 2) (set 1 3))
=> (set 1 3 2)