Clojure - 如何返回序列?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clojure - 如何返回序列?相关的知识,希望对你有一定的参考价值。

p-seq:接收两个整数参数,“from”和“to”,此方法应该返回一个只包含is-p函数在“from”和“to”之间给出的数字的序列。我写的当前代码只打印出“from”和“to”之间的所有数字。我想要p-seq来返回一个序列。

is-p:如果数字是素数,则检查并返回true,否则返回false。

(defn p-seq [from to]
  (loop [count from]
    (if (> count to)
      (println "")
      (do
        (def seqf (is-p count))
          (if(= seqf true)
            (print count " ")
            )
  (recur (inc count))))))

任何帮助赞赏。谢谢。

答案

您只需在序列上使用filter函数,就可以对每个元素应用滤波器

给出检查素数的is-p函数,

user=> (filter is-p (range 1 20))
(2 3 5 7 11 13 17 19)

所以,你的p-seq函数看起来像,

user=> (defn p-seq [from to]
          (filter is-p (range from to)))
#'user/p-seq

user=> (p-seq 100 200)
(101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199)

引用

https://clojuredocs.org/clojure.core/range

https://clojuredocs.org/clojure.core/filter

另一答案

由于你有一个谓词函数is-prime?,你可以简单地用它来过滤fromto之间所有数字的范围:

(filter is-prime? (range 100 200))
=> (101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199)

注意range的上限参数是独占的。

以上是关于Clojure - 如何返回序列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在clojure中创建一个惰性随机数序列

如何将 clojure 函数作为字符串返回

如何通过gen-class在Clojure中生成可序列化的java类?

Clojure中doseq和for之间的区别

Clojure: cons (seq) vs. conj (list)

Clojure:减少大型懒惰收集会占用内存