trace 
%Primszamok 
DOMAINS  
 
szam = prim;osszetett 
 
PREDICATES  
 
%Ismetles 
nondeterm   for(integer /*Mettol*/, integer /* futo*/
 
%Kovetkezo primszam keresese 
nondeterm   kovetkezo(integer) 
 
%Tedd el a szamot, ha prim! 
tedd_el(szam, integer) 
%Oszthato-e a szam a primszammal? 
nondeterm   oszthato(integer /*vizsgalt egesz*/, integer /*prim */, szam) 
 
 
DATABASE 
 
%Primszamok 
p(integer) 
 
CLAUSES  
 
%Ismetles 
 
for(Mettol,Mettol). 
for(Mettol,Futo) if 
    Mettol1=Mettol+1
            for(Mettol1,Futo). 
%Kovetkezo primszam keresese 
%Oszthato valamelyik elozo primszammal, ne nezd tovabb mas primmel! 
kovetkezo(12) if trace(off),fail. %Nyomkovetes leallitasa. 
kovetkezo(N) if 
        p(P),oszthato(N,P,Milyen), 
        !, 
        tedd_el(Milyen,N). 
kovetkezo(N) if % Nincs tobb primszam, vagy nincs meg primszam elteve. 
        tedd_el(prim,N). 
 
%Oszthato-e a szam a primszammal? 
oszthato(N,P,prim     ) if 
    P*P>N,!.     %Tul nagy a primszam, nem kell tovabb vizsgalni. 
oszthato(N,P,osszetett) if 
        (N mod P)=0.     %Igen. 
 
%Tedd el a szamot, ha prim! 
tedd_el(osszetett,_). 
tedd_el(prim,N) if assertz(p(N)),write(N),write('\t'). 
 
GOAL  
        write("Meddig?"), 
        readint(Meddig), 
        retractall(p(_)), %Biztos, ami biztos, induljunk tiszta lappal! 
        for(2,N), 
          kovetkezo(N), 
%Felso hatar ellenorzese 
    N>=Meddig
        !, % Vagas: vissza ne massz, ha ezutan nem sikerul valami! 
        nl, 
        save("prim.txt").