我将我的表定义为
(def persons '({:id 1 :name "olle"} {:id 2 :name "anna"} {:id 3 :name "isak"} {:id 4 :name "beatrice"}))
然后尝试使用filter命令,(< :id 2)
是我的函数,而persons
是我正在过滤的参数。
(filter (< :id 2) persons);
我正在返回此错误,并且不知道如何修复我的程序
ClassCastException clojure.lang.Keyword cannot be cast to java.lang.Number clojure.lang.Numbers.lt (Numbers.java:221)
答案 0 :(得分:2)
问题是filter
的第一个参数应该是谓词函数,但在您的示例中,它只是(< :id 2)
的值。
(filter #(< (:id %) 2) persons)
该函数应该接受一个参数(当前元素)并返回一个值,该值指示它是否满足谓词。对于同样的事情,这也是有效的,更长的语法:
(filter (fn [p] (< (:id p) 2)) persons)
您还可以defn
这样的独立谓词函数:
(defn id-less-than-2? [person]
(< (:id person) 2))
(filter id-less-than-2? persons)