如何从clojure中的给定两个值逐个调用函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从clojure中的给定两个值逐个调用函数相关的知识,希望对你有一定的参考价值。

嗨,我是clojure的新手,我已经编写了这个函数,并且它中的错误很少。我有一个名为'checkFunction'的函数,它基本上得到一个paramtere并返回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,它应该将该数字放在向量中并返回或打印它。到目前为止,我已经到了这个,但我有点挣扎。

任何帮助或正确的方向都会非常感激。

答案

如果我理解你的问题,你会尝试根据某些谓词过滤一系列数字。 (为了这个例子,我设置你的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 中,如何合并两个地图向量?

如何使用 clojure.test 将值从夹具传递到测试?

从clojure中的普通lisp替换(null x)函数的惯用方法

如何从 VBA 中的两个数组函数获取单个数组输出?

如何在另一个 defn 中调用一个 defn 函数以及如何在 Clojure 中调试

clojure 中交错的扩展