嗨,我是clojure的新手,我已经编写了这个函数,但它中的错误很少。我有一个名为' checkFunction '的函数,它基本上得到一个参数并返回true或false。
(defn getList [number1 number2]
(loop for x from number1 to number2
(recur (inc num) (if (checkFunction? x) (concat p [num]) p))))
我希望上面的功能有两个参数,例如,如果我说'获取列表15 20'它应该使用 15 16 17 18 19 20 调用检查功能,并且如果checkFunction返回 true ,则应将该数字放在向量中,返回或打印。到目前为止,我已经有了这个,但我有点挣扎。
任何帮助或正确的方向都会非常感激。
答案 0 :(得分:0)
如果我理解你的问题,你会尝试根据某些谓词来过滤一系列数字。 (为了示例,我将check-function?
设置为对奇数返回true。)
(defn check-function? [n]
(odd? n))
(defn get-list [n1 n2]
(filter check-function? (range n1 (+ 1 n2))))
> (get-list 15 20)
(15 17 19)
如果您对loop-recur的工作原理感兴趣,那么这里的版本更像您最初尝试的版本。但我会说,关于clojure最好的事情之一就是你很少这么做!
(defn get-list-2 [n1 n2]
(loop [src (range n1 (+ 1 n2)) dest []]
(if (empty? src)
dest
(let [n (first src)
src (rest src)
dest (if (check-function? n) (conj dest n) dest)]
(recur src dest)))))
> (get-list-2 15 20)
[15 17 19]