如果元素存在于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
怎么了?我该如何解决?
谢谢。
答案 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))))