【问题标题】:Clojure inclusive range? prime-seq print-top-primesClojure 的包容范围? prime-seq print-top-primes
【发布时间】:2019-01-13 15:40:30
【问题描述】:

当它是素数并且应该打印时,Prime-seq 函数不打印 2 个输入之间范围内的最大数字。此外,如果它是素数,则影响打印顶部素数也不会打印范围内的最大数字。不确定如何包含这个数字,我认为问题出在 prime-seq 函数中,而 print-top-primes 遇到了同样的问题,因为它调用了 prime-seq。任何帮助将不胜感激。

我更改了 prime-seq 的 :let 中的值,尝试添加我在网上找到的包含语法,但要么什么也没做,要么返回错误,所以我将其删除。

(defn prime-seq [from to]
        (for [i (range from to)
          :let [y (+ i 0)]
          :when (is-prime? i)]
        y))

(defn print-top-primes [from to]
  (doseq [i (take 10 (reverse (prime-seq from to)))]
    (println i))
  (printf "Total = %d\n" (reduce + (prime-seq from to))))

使用输入(prime-seq 7 11),预期输出应该是“7 11”,但我得到的是“7”。

输入:(print-top-primes 50 103)我希望输出为“103、101、97、89、83、79、73、71、67”,但我得到的输出是“ 101、97、89、83、79、73、71、67、61"。

【问题讨论】:

标签: clojure


【解决方案1】:

因为range 不包含在其end 参数中。来自文档:

返回从 start(包括)到 end(不包括)的惰性 nums 序列

您可以在使用前简单地增加end,使用inc

(defn prime-seq [from to]
        (for [i (range from (inc to))
          :let [y (+ i 0)]
          :when (is-prime? i)]
        y))

【讨论】:

  • 非常感谢这个世界。我确实尝试包含“inc”,但将其放在错误的位置。
猜你喜欢
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多