Clojure - 如何返回序列?

时间:2017-12-18 23:29:07

标签: clojure

p-seq:接收两个整数参数,“from”和“to”,此方法应该返回一个序列,其中只包含{from}和“to”之间is-p函数给出的数字。我写的当前代码只打印出“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))))))

任何帮助表示赞赏。谢谢。

2 个答案:

答案 0 :(得分:1)

由于您拥有谓词函数is-prime?,因此您只需使用它来过滤from和{{1}之间所有数字的范围 }}:

to

注意(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) 的上限参数是独占的。

答案 1 :(得分:1)

您只需在序列上使用range函数,就会对每个元素应用过滤器

给定filter函数检查素数,

is-p

所以,你的user=> (filter is-p (range 1 20)) (2 3 5 7 11 13 17 19) 函数看起来像,

p-seq

引用

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

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