什么是布尔值的等价物?在Clojure

时间:2015-04-12 07:59:33

标签: types clojure boolean

Scheme支持boolean?来测试符号或值是否为布尔类型。

(boolean? #\t)
(boolean? #\f)

在Clojure中,我只能找到integer?number?list?等,但没有boolean?

Clojure中boolean?的等价物是什么?

6 个答案:

答案 0 :(得分:10)

你可以做到

(defn boolean? [x]
  (instance? Boolean x))

答案 1 :(得分:8)

又一个版本:

(defn boolean? [x]
  (or (true? x) (false? x)))

答案 2 :(得分:4)

  • 在Clojure中,所有值都是合乎逻辑的:if form及其所有后代的有效第一个参数。从这个意义上讲,一切都是布尔值。
  • 唯一的错误值是nilfalse本身。虽然
    Boolean/FALSE,包含false的静态对象和(Boolean. false) - 包含Boolean的新false对象 - 评估 假。这最后一点不符合我阅读文档的方式,但那是 Light Table向我展示了什么。我说要避免构建你的 拥有Boolean个。为什么Java允许它,我无法理解。
  • 我从未遇到需要了解逻辑的案例 是否有东西在集#{true false}中。如果你需要这样做, 关注Shlomi's advice
  • 许多标准函数为 nothing failure 生成nil。对于 例如,应用于非成员的集合。在这种情况下,你可能会发现 您自己使用nil?来测试nil,尤其是false 将是一个有效和独特的价值。

答案 3 :(得分:3)

Clojure 1.9以来clojure.core中有boolean?谓词函数。

答案 4 :(得分:1)

如果你在类型的土地上,并想知道某些东西是否是布尔值,那么就像Shlomi发布的那样,你可以从boolean?轻松地创建一个instance?函数。这是一个varargs版本:

(defn bools? 
  [& xs]
  (every? (partial instance? Boolean) xs))

带输出:

>> (bools? true) => true
>> (bools? true false) => true
>> (bools? true nil) => false

我从来不需要这样做,因为我只处理过价值观以及clojure中的所有内容都是“真实的”除了假或零之外的事实。

答案 5 :(得分:1)

(defn bool? [x] (= x (boolean x)))