Racket 在参数列表上调用`and`
是否有方法调用参数列表的Racket 在参数列表上调用`and`,racket,Racket,是否有方法调用参数列表的和或或?像 (and (list #t #t #f)) ? 我试着写(apply和(list#t#t#f)),但没有成功。试着 在这种情况下,where本质上是一个标识函数 (apply and(list#t#t#f))不起作用的原因是和不是一个函数。它是一个宏,这是必需的,因为(和#f(error'foo))应该短路(计算为#f)。如果它是一个函数,则会导致错误。您可以使用关系库中的和(披露:我是作者): 以先前的答案为基础。一个穷人的做法是 > (ormap
和或或?像
(and (list #t #t #f))
?
我试着写(apply和(list#t#t#f))
,但没有成功。试着
在这种情况下,where本质上是一个标识函数
(apply and(list#t#t#f))
不起作用的原因是和
不是一个函数。它是一个宏,这是必需的,因为(和#f(error'foo))
应该短路(计算为#f
)。如果它是一个函数,则会导致错误。您可以使用关系库中的和(披露:我是作者):
以先前的答案为基础。一个穷人的做法是
> (ormap (lambda (x) (not (false? x))) (list #t #t #f))
## #t
> (andmap (lambda (x) (not (false? x))) (list #t #t #f))
## #f
谢谢有没有一种方法可以不用调用值
?您不能定义自己的函数来使用一个列表并使用适当的参数调用ormap
?这个问题与回答相关:为什么要使lambda如此复杂?你可以把它设为(ormap(λ(x)x)(list#t#t#f)
,它也可以达到同样的目的,甚至更好的(ormap identity(list#t#t#f))
(require relation)
(any? (list #t #t #f)) ;=> #t
(all? (list #t #t #f)) ;=> #f
> (ormap (lambda (x) (not (false? x))) (list #t #t #f))
## #t
> (andmap (lambda (x) (not (false? x))) (list #t #t #f))
## #f