Clojure-过滤器的用户实现

时间:2018-07-23 07:32:14

标签: clojure functional-programming lisp

我是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])

该功能似乎没有得到全面评估。

我看不到我在做什么错,因此非常感谢您提供一些帮助。

2 个答案:

答案 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))使其成为函数调用,所以您只需要将此参数传递给下一个过滤器调用即可。