Clojure 的 any?
函数似乎是总是返回 true
。
(defn any? "给定任何参数时返回 true。" {:tag Boolean :added "1.9"} [x] true)
与 not-any?
进行对比。
(def ^{:tag Boolean :doc "如果 (pred x) 对于 coll 中的任何 x 是逻辑真,则返回 false,否则返回 true。" :arglists '([pred coll]) :added "1.0"} not-any? (comp not some))
我认为 any?
应该接受两个参数,并且在任何谓词为 true 时返回 true
。
(def ^{:tag Boolean :doc "如果 (pred x) 对于 coll 中的任何 x 是逻辑真,则返回 true,否则返回 false。" :arglists '([pred coll]) :added "1.9"} any? (comp boolean some))
感谢 ClojureDocs 上的 Kofrasa。
以下是需要运行的测试
`
(ns user
(:require [clojure.test :refer [are deftest]]
[clojure.test.check.clojure-test :refer [defspec]]
[clojure.test.check.generators :as gen]
[clojure.test.check.properties :as prop])
(:refer-clojure :exclude [any?]))
(deftest clojure-any
(are [x y] (= ((comp boolean some) true? x) (clojure.core/any? y))
[true] true
[false] false ;; this fails
[true true] true
[false true] true
[false false] false ;; so does this
))
(def
^{:tag Boolean
:doc "如果 (pred x) 对于 coll 中的任何 x 是逻辑真,则返回 true,否则返回 false。
else false."
:arglists '([pred coll])
:added "1.9"}
any? (comp boolean some))
(defspec correct-any 1000
(prop/for-all [v (gen/such-that not-empty (gen/vector gen/boolean))]
(= ((comp boolean some) true? v)
(any? true? v)
(not (not-any? true? v)))))
`
对于格式错乱表示歉意。
https://gist.github.com/wildwestrom/9568e9c659d30a2a663a9a0a8235a6b9