Clojure列表成员投射错误

0xA*_*xAX 2 function list clojure

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

我的代码:

(defn is_member [elem ilist]
  ((elem []) false)
  (if (= elem (first (list ilist))) 
    (true)
    (is_member elem (rest (list ilist)))
  )
)
Run Code Online (Sandbox Code Playgroud)

我尝试运行它:

(is_member 1 '(1,2,3,4))
Run Code Online (Sandbox Code Playgroud)

但得到错误:

#<CompilerException java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn 
Run Code Online (Sandbox Code Playgroud)

怎么了?我该如何解决?

谢谢.

ama*_*loy 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))))
Run Code Online (Sandbox Code Playgroud)