clojure - 我如何从clojure中给定的两个值一个一个地调用一个函数

标签 clojure functional-programming lisp

您好,我是 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))))

我希望上面的函数采用两个参数,例如,如果我说'get List 15 20',它应该使用15 16 17 18 19 20 调用检查函数,并且如果 checkFunction 返回 true,它应该将该数字放入 vector返回打印。到目前为止,我已经了解了这一点,但我有点挣扎。

任何帮助或正确的指导将不胜感激。

最佳答案

如果我理解您的问题,您是在尝试根据某个谓词过滤一系列数字。 (为了示例,我将您的 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]

关于clojure - 我如何从clojure中给定的两个值一个一个地调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47876542/

相关文章:

clojure - F# 和 Clojure 之间的显着差异

clojure - 如何在 Windows 上安装 clojure-contrib?

clojure - 我对 core.cache 做错了什么?

haskell - 检查密码是否足够强——Haskell 与过程语言

macros - 宏在函数中不起作用

python - 如何猜测以某种方式生成的句子列表的语法?

clojure - Lamson 适合 clojure?

functional-programming - SML 使用带有签名的 abstype

for-loop - Elm - 树 - 将分支添加到另一棵树 - 递归 for 循环

lisp - 如何显示前 N 个自然数,知道 Lisp 中的除数