Для генерации всех простых чисел используется встроенная функция isprime / 1. пролог - PullRequest
1 голос
/ 17 марта 2020

Вопрос задайте:? - премьер (X).

Решение должно выглядеть следующим образом:

X = 1;
X = 1;
X = 2;
X = 3;
X = 5;
X ....

Так вот, что у меня есть до сих пор: премьер (X): - повторить , incr (X, X), isprime (X).

incr(X,X1) :- X1 is X+1.

isprime(X):-
    Y is 2, 
    X > 1, 
    \+div(X,Y).


div(X,Y):-
    N is Y*Y,
    N =< X,
    X mod Y =:= 0.

div(X,Y):-
    Y < X, 
    Y1 is Y+1, 
    div(X,Y1).

1 Ответ

0 голосов
/ 18 марта 2020

Используйте следующую альтернативу для предиката incr/2:

incr(I, I).
incr(I, K) :-
    J is I + 1,
    incr(J, K).

Назовите его, используя цель:

| ?- incr(1,X), isprime(X).
?- incr(1,X), isprime(X).
X = 2 ;
X = 3 ;
X = 5 ;
X = 7 ;
X = 11 ;
X = 13 ;
...
...