在范围内列出素数会导致Clojure中出现错误消息

时间:2019-01-13 04:28:54

标签: clojure

我已经很接近破解了,但是我看不到我所缺少的。是素数?如果输入的数字是质数,则应返回true;如果输入的数字不是质数,则应返回false。我创建的函数除了可以很好地工作之外,对于数字1不会返回false。作为规范的一部分,我被告知同时设置数字1和2,这是我尝试执行的操作,但似乎没有做任何东西。

  (defn is-prime? [n]
  (if (= n 1) false)
  (if (= n 2) no-divisors?)
  (no-divisors? n)
)

以下是is-prime的所有输入和预期结果的列表?唯一返回错误的值是(is-prime?1)。

   (is-prime? 1)
=> false
   (is-prime? 2)
=> true
   (is-prime? 3)
=> true
   (is-prime? 4)
=> false
   (is-prime? 101)
=> true

1 个答案:

答案 0 :(得分:1)

在clojure中,函数的结果是函数的最后一个表达式,因此在您的示例中,(if (= n 1) false)(if (= n 2) no-divisors?)总是丢失,因为最后一个表达式是(no-divisors? n)

尝试一下:

(defn is-prime? [n]
    (cond 
       (= n 1) false
       (= n 2) true
       :else (no-divisors? n)))