【问题标题】:How can I get this function to work in Clojure?如何让这个函数在 Clojure 中工作?
【发布时间】:2020-01-11 01:42:13
【问题描述】:

我是 Clojure 的新手,正在研究这个函数 no-divisors?,如果没有介于 2 和 √ 之间的数字,它应该返回 true????除n,否则为假。我还需要在no-divisors 中使用 2 个函数。第一个是get-divisors,它接受一个数字 n 作为输入并返回 2 到 √???? 之间的所有数字?包括的。第二个函数是Divides?,如果 x 除以 n,则返回 true,否则返回 false。

这是我尝试过的:


(defn Divides? [a b]
  (zero? (mod b a)))

(defn get_divisors [n]
 ( range 2 (Math/sqrt n)))

(println "get divisors"  (get_divisors 101))
output :get divisors (2 3 4 5 6 7 8 9 10)

(defn no-divisors? [n]
  (->> (get_divisors n)
       (filter #(Divides? % n))
       empty?))

(println "no-divisors"(no-divisors? 9))

 //output :expected :false current: true

我预计结果是错误的,但事实并非如此。任何建议,我将不胜感激

【问题讨论】:

    标签: clojure


    【解决方案1】:

    请注意,range 不包括远端。

    所以你的 get-divisors 应该是:

    
    (defn get_divisors [n]
     (range 2 (inc (int (Math/sqrt n)))))
    
    (defn no-divisors? [n]
      (->> (get_divisors n)
           (filter #(Divides? % n))
           empty?))
    
    

    然后用 9 调用 no-divisors 将返回 false。

    【讨论】:

      【解决方案2】:

      当我复制并粘贴您对 Divides 的定义时?和无除数?进入 Clojure REPL,然后调用 (no-divisors? 9),它返回 false。

      【讨论】:

      • 很抱歉,它确实返回 true,这与预期结果相同,但我没有使用 get-divisors 函数,尽管这是我要求 @andy_fingerhut 的功能
      • 我认为您的问题可能有一些错误,这使得您不清楚您的问题到底是什么。例如,您说您需要在 get-divisors 中使用 2 个函数。第一个是 get-divisors ......你的意思是你需要在 no-divisors 中使用 2 个函数吗?然后你说 get-divisors 和 Divides 都可以工作,但是你不能让 get-divisors 工作。请编辑您的问题,以便更清楚地了解哪些有效,哪些无效。
      • 你说得对,我的意思是让no-divisors 工作,我不小心写错了,但现在更正了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 2017-09-19
      • 2016-11-13
      • 1970-01-01
      • 2020-08-16
      • 2015-01-01
      • 2022-06-18
      相关资源
      最近更新 更多