在clojure中,如果定义为[x]参数然后引用为x,为什么不识别x?在代码块?

时间:2014-11-04 14:30:24

标签: clojure lisp

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

我得到了

  

无法解析符号:x?在这种情况下

x是函数的参数,我只是参考它,我错过了什么?

3 个答案:

答案 0 :(得分:3)

因为x和x?有两个不同的名字。您的功能可以简单地写成

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

答案 1 :(得分:2)

在clojure中x?是符号的名称,而不是符号x和运算符?。编译器告诉您没有定义任何名为x?的变量或绑定。

此外,(false)(true)将布尔值作为函数调用。这将引发运行时错误。请改用falsetrue

答案 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))