Ракетка - Найти наибольшее простое число в диапазоне - PullRequest
0 голосов
/ 27 октября 2019

Я пишу функцию наименьшего простого числа, которая потребляет два натуральных числа и выдает наибольшее простое число в диапазоне снизу вверх. Я использовал вспомогательную функцию is-prime? чтобы проверить, является ли число простым или нет.

Ниже мой код:

(define (largest-prime bottom top)
  (cond
    [(and (>= top bottom)(equal? true (is-prime? top))) top]
    [(and (< top bottom) (equal? true (is-prime? top))) false]
    [else (largest-prime (sub1 top) bottom)]))

Кажется, что эта функция работает только в определенных случаях:

> (largest-prime 12 19)
19
> (largest-prime 12 18)
17
> (largest-prime 12 16)
false

Может кто-нибудь сказать мне, где я делаю не так?

1 Ответ

0 голосов
/ 27 октября 2019

Вы переключили bottom и top в вашем else случае, так что вы можете исправить это на:

[else (largest-prime bottom (sub1 top))]

Еще одна вещь, на которую стоит обратить внимание, вам не нужноприравнять возвращаемое значение is-prime? к «истине» или «ложь». Достаточно просто использовать возвращаемое значение в качестве условного. Например, рассмотрим следующее:

(define (largest-prime bottom top)
  (cond
    [(< top bottom) false]
    [(is-prime? top) top]
    [else
     (largest-prime bottom (sub1 top))]))
...