Ответ в теме: Проверка числа на простоту (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. Простые числа всегда положительные и если не выполнить сравнение с нулем – то в вашем случае получился бы вечный цикл.