代码之家  ›  专栏  ›  技术社区  ›  Mahmud Adam

实现类似于内置布尔值的布尔值

  •  -1
  • Mahmud Adam  · 技术社区  · 8 年前

    我正在学习一些Clojure教程,其中一个问题是:Implement(boolean x),它的工作方式与内置布尔函数类似:对于nil和false,它返回false,对于所有其他值,它返回true。您可以在其实现中使用if,但不能使用内置布尔值。

    我不知道如何只用if语句来实现这一点。这是可行的,但有更好的方法吗?

    (defn boolean [x]
       (cond
         (= x nil) false
         (= x false) false
         :else true))
    
    2 回复  |  直到 8 年前
        1
  •  4
  •   Lee    8 年前

    nil false 都是“虚假的”(即等同于 在布尔上下文中),因此可以执行以下操作:

    (defn boolean [x]
      (if x true false))
    

    if 表达式的形式 (if condition true-expr false-expr) 所以如果 condition 计算结果为 true 整个表达式的计算结果为 true-expr 否则 false-expr 。所以如果 x truthy (即不 )表达式的计算结果为 真的 如果 x(x) falsey ( 是clojure中唯一的false值),则返回false。

        2
  •  1
  •   leetwinski    8 年前

    也许是这样?

    (defn my-boolean [val]
      (not (or (nil? val) (false? val))))