Clojure включительно ассортимент? prime-seq print-top-primes - PullRequest
0 голосов
/ 13 января 2019

Функция Prime-seq не печатает наибольшее число в диапазоне между 2 входами, когда он прост и должен быть напечатан. Кроме того, выполнение print-top-primes, поскольку это также не будет печатать наибольшее число в диапазоне, если оно простое. Не уверенный, как включить это число, я думаю, что проблема в функции prime-seq, и print-top-primes испытывает ту же проблему, потому что это делает вызов Prime-seq. Любая помощь будет принята с благодарностью.

Я изменил значения в: let of prime-seq, попытался добавить инклюзивный синтаксис, который я нашел в Интернете, но он либо ничего не сделал, либо вернул ошибку, поэтому я удалил ее.

(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 ".

1 Ответ

0 голосов
/ 13 января 2019

Поскольку range не включается в аргумент end. Из документов:

Возвращает ленивую последовательность чисел от начала (включительно) до конца (исключая)

Вы можете просто увеличить end перед использованием, используя inc:

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

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