(defn boolean [x]
(if (x? nil or false)
(false)
(true)))
我得到了
无法解析符号:x?在这种情况下
x
是函数的参数,我只是参考它,我错过了什么?
答案 0 :(得分:3)
因为x和x?有两个不同的名字。您的功能可以简单地写成
(defn boolean [x]
(if x true false))
答案 1 :(得分:2)
在clojure中x?
是符号的名称,而不是符号x
和运算符?
。编译器告诉您没有定义任何名为x?
的变量或绑定。
此外,(false)
和(true)
将布尔值作为函数调用。这将引发运行时错误。请改用false
和true
。
答案 2 :(得分:1)
我不确定你的问题是什么(你没有定义过x?
),但你可以在Clojure中实现它,就像这样
(defn boolean [x]
(not
(or
(nil? x)
(false? x))))
(boolean 1)
#=> true
(boolean nil)
#=> false
(boolean false)
#=> false
(boolean [])
#=> true
或更隐式的解决方案
(defn boolean [x]
(if x
true
false))
或者你的方法:
(defn boolean [x]
(if (or (nil? x) (false? x))
false
true))