Как я могу заставить эту функцию работать в Clojure? - PullRequest
1 голос
/ 11 января 2020

Я новый ученик в Clojure и работаю над этой функцией no-divisors?, где она должна возвращать true, если ни одно из чисел от 2 до √? не делит n, и false в противном случае. Мне также нужно использовать 2 функции внутри no-divisors. Первый - get-divisors, который принимает число n в качестве входных данных и возвращает все числа от 2 до √? включительно. Вторая функция Divides? возвращает true, если x делит n и 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

Я ожидаю, что результат будет ложным, но это не так , Любые предложения, ребята, я был бы признателен

Ответы [ 2 ]

2 голосов
/ 11 января 2020

Обратите внимание, что range не включается на дальнем конце.

Таким образом, ваши делители get должны быть:


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

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

Тогда вызов no-divisors с 9 вернет false.

0 голосов
/ 11 января 2020

Когда я копирую и вставляю ваши определения делений? а без делителей? в Clojure REPL, затем вызов (без делителей? 9), он возвращает false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...