Clojure 使用doseq和bool函数

Clojure 使用doseq和bool函数,clojure,Clojure,我是新来Clojure的 假设我有一个简单的doseq代码: f是一个布尔函数,我想知道是否所有的迭代都返回TRUE。 这就像计算每个序列的and运算符 我如何检查每次迭代的结果并在doseq之后使用它, 最好的方法是什么 例如: (and (f? :a db) (f? :b db)...) 有许多方法可以映射和过滤集合以搜索不同的内容,希望这些示例能为您提供一些想法: user> (def db {:a 1 :b 2 :c 3 :d 4}) #'user/db user> (m

我是新来Clojure的

假设我有一个简单的doseq代码:

f是一个布尔函数,我想知道是否所有的迭代都返回TRUE。 这就像计算每个序列的and运算符

我如何检查每次迭代的结果并在doseq之后使用它, 最好的方法是什么

例如:

(and (f? :a db) (f? :b db)...)

有许多方法可以映射和过滤集合以搜索不同的内容,希望这些示例能为您提供一些想法:

user> (def db {:a 1 :b 2 :c 3 :d 4})
#'user/db 
user> (map (fn [[k v]] (if (even? v) true false)) db) 
(false false true true) 
user> (filter (fn [[k v]] (if (even? v) true false)) db) 
([:b 2] [:d 4]) 
有几种方法可以判断它们是否都是真的:

user> (reduce #(and %1 %2) 
              (map (fn [[k v]] (if (even? v) true false)) 
                    {:a 2 :b 4 :c 6}))                                             
true 
user> (reduce #(and %1 %2) (map (fn [[k v]] (if (even? v) true false)) db)) 
false  

user> (not-any? false? (map (fn [[k v]] (if (even? v) true false)) db)) 
false 
user> (not-any? false? (map (fn [[k v]] (if (even? v) true false)) {:a 2 :b 4 :c 6}))
true
查看数据库中的其他内容:

user> (filter (fn [[k v]] (if (even? v) true false)) {:a 2 :b 4 :c 6})
([:a 2] [:c 6] [:b 4])  
user> (filter (fn [[k v]] (if (odd? v) true false)) {:a 2 :b 4 :c 6})
()
user> (if (empty? (filter (fn [[k v]] (if (odd? v) true false)) {:a 2 :b 4 :c 6})) "all where even" "some where odd")
"all where even"

有许多方法可以映射和过滤集合以搜索不同的内容,希望这些示例能为您提供一些想法:

user> (def db {:a 1 :b 2 :c 3 :d 4})
#'user/db 
user> (map (fn [[k v]] (if (even? v) true false)) db) 
(false false true true) 
user> (filter (fn [[k v]] (if (even? v) true false)) db) 
([:b 2] [:d 4]) 
有几种方法可以判断它们是否都是真的:

user> (reduce #(and %1 %2) 
              (map (fn [[k v]] (if (even? v) true false)) 
                    {:a 2 :b 4 :c 6}))                                             
true 
user> (reduce #(and %1 %2) (map (fn [[k v]] (if (even? v) true false)) db)) 
false  

user> (not-any? false? (map (fn [[k v]] (if (even? v) true false)) db)) 
false 
user> (not-any? false? (map (fn [[k v]] (if (even? v) true false)) {:a 2 :b 4 :c 6}))
true
查看数据库中的其他内容:

user> (filter (fn [[k v]] (if (even? v) true false)) {:a 2 :b 4 :c 6})
([:a 2] [:c 6] [:b 4])  
user> (filter (fn [[k v]] (if (odd? v) true false)) {:a 2 :b 4 :c 6})
()
user> (if (empty? (filter (fn [[k v]] (if (odd? v) true false)) {:a 2 :b 4 :c 6})) "all where even" "some where odd")
"all where even"

你不需要评估每一个术语,只需要评估到第一个错误。如果我得到了你想要的,试试看


你不需要评估每一个术语,只需要评估到第一个错误。如果我得到了你想要的,试试看

doseq适用于身体仅为每个元素产生副作用的情况

您的示例应在以下情况下实施:

doseq适用于身体仅为每个元素产生副作用的情况

您的示例应在以下情况下实施:


doseq可能不是您正在搜索的对象。doseq可能不是您正在搜索的对象