Clojure列表成员投射错误

时间:2011-09-24 17:45:24

标签: list function clojure

如果元素存在于list中,我尝试编写返回true的函数,否则返回false。

我的代码:

(defn is_member [elem ilist]
  ((elem []) false)
  (if (= elem (first (list ilist))) 
    (true)
    (is_member elem (rest (list ilist)))
  )
)

我尝试运行它:

(is_member 1 '(1,2,3,4))

但是得到错误:

#<CompilerException java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn 

怎么了?我该如何解决?

谢谢。

1 个答案:

答案 0 :(得分:5)

看起来你是来自一种比Clojure更广泛的模式匹配的语言; ((elem []) false)在Clojure中基本上是无稽之谈。相反,只需测试ilist是否为空。

还有其他一些错误,所以这里有一个片段,它实际上可以正常工作,尽可能接近你的意图:

(defn is_member [elem ilist]
  (cond (empty? ilist) false
        (= elem (first ilist)) true
        :else (is_member elem (rest ilist))))