我是Clojure的新手,建议的挑战之一是用户实现Filter函数。
所以我想到了这个
(defn filterr
"Filter implementation"
[condition coll]
(if-not (empty? coll)
(if (condition (first coll))
(cons (first coll) (filterr condition (rest coll)))
(filterr (condition (rest coll))))))
(defn -main
"Main" []
(t/is (=
(filterr #(> % 2) [1 2 3 4 5 6])
[3 4 5 6])
"Failed basic test"))
但是,我的测试失败并显示错误
ERROR in () (Numbers.java:229)
Failed basic test
expected: (= (filterr (fn* [p1__42#] (> p1__42# 2)) [1 2 3 4 5 6])
[3 4 5 6])
该功能似乎没有得到全面评估。
我看不到我在做什么错,因此非常感谢您提供一些帮助。
答案 0 :(得分:5)
if语句的then子句中还有一组()。
(filterr (condition (rest coll)))
vs
(filterr condition (rest coll))
答案 1 :(得分:2)
错误在此行(filterr (condition (rest coll))))))
您应该改为使用(filterr condition (rest coll)))))
。因为(condition (rest coll))
使其成为函数调用,所以您只需要将此参数传递给下一个过滤器调用即可。