【问题标题】:Clojure - How to return a sequence?Clojure - 如何返回一个序列?
【发布时间】:2017-12-18 23:29:06
【问题描述】:

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

is-p:如果一个数是质数,则检查并返回真,否则返回假。

(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))))))

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

【问题讨论】:

    标签: clojure


    【解决方案1】:

    您可以简单地在序列上使用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

    【讨论】:

    • 完美。请注意关于(range x y) 的另一个答案实际上是[x y-1],如果您希望将y 包括在内,请执行(range from (+ 1 to)) 之类的操作,clojuredocs.org/clojure.core/range 也对其进行了描述
    【解决方案2】:

    由于您有一个 谓词 函数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 的上限参数是独占的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多