Ответ в теме: Проверка числа на простоту (Prolog)

      Комментарии к записи Ответ в теме: Проверка числа на простоту (Prolog) отключены
#2877

Более правильно ваш код переписать следующим образом:

isDivisible(Number, Divisor):-
Number mod Divisor = 0, !.
isDivisible(Number, Divisor):-
Divisor * Divisor <= Number,
NextDivisor = Divisor + 1,
isDivisible(Number, NextDivisor).
isPrime(1):-!.
isPrime(Number):-
Number > 0,
not(isDivisible(Number, 2)).

Функция isDivisible проверяет что число Number делится на одно из чисел из диапазона [Divisor, Number^(1/2)]. А функция isPrime проверяет частный случай с числом равным единице и в случае если аргумент больше нуля — проверяет, что он не имеет делителей начиная с числа 2. Простые числа всегда положительные и если не выполнить сравнение с нулем — то в вашем случае получился бы вечный цикл.