Проверка первичности в прологе - PullRequest
0 голосов
/ 27 ноября 2018

Я новичок в прологе.Я написал следующий код, чтобы проверить, простое ли число.

notPrime(X):-
    integer(Y),
    Y>1,
    mod(X,Y) is 0.

prime(X):- \+ notPrime(X).

Я думаю: «Если число X не простое, то существует целое число Y> 1, такое, что Xмод Y равен 0. "

Код не работает, и я не могу понять, почему.Спасибо:)

1 Ответ

0 голосов
/ 27 ноября 2018

Код не работает, и я не могу понять, почему.

В вашем первом предложении

notPrime(X):-
    integer(Y),
    Y>1,
    mod(X,Y) is 0.

утверждение

integer(Y) 

использует переменную Y, но Y не привязан к значению, а когда

integer(Y)

проверяет, является ли Y целым числом, происходит сбой.См. integer / 1

integer/1 не генерирует целые числа, он проверяет, является ли значение целым числом.

Рабочий пример генерации простых чисел с использованием Prolog см. В Розеттский код задание для Первичность по пробному делению

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