Clojure:测试从映射操作中得到的每个值是否为真。

4

如何测试map返回的集合中的每个值都为true?

我正在使用以下代码:

(defn test [f coll]
  (every? #(identity %) (map f coll)))

使用匿名函数#(identity %),但我想知道是否有更好的方法。

我不能使用(apply and ...),因为and是一个宏。

更新:顺便说一下,我正在学习Kees Doets和Jan can Eijck的《The Haskell Road to Logic, Maths, and Programming》,但是用Clojure做练习。这是一本非常有趣的书。


你使用打字机字体输入“true”的方式让它看起来像是要检查精确值Boolean/TRUE,但你的代码接受任何非nil或false的值。 - Jouni K. Seppänen
2个回答

5

either

(every? identity (map f coll)) 

或者
(every? f coll)

4

您可以做:

(every? true? coll)

谢谢。有没有一个单一的函数可以实现这个((g (map f coll)))? 我查看了文档,但没有找到。 - Ralph
1
请注意,true?测试的是布尔值true,而不是逻辑上的true。对于逻辑上的true,您应该使用identity。我相信有人曾经谈论过向every?添加单参数arity,这将等同于(every?identity coll),因此将成为您想要的单个函数。 - Alex Taggart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接