4


AMZI-Prologi kasutajaümbrus

AMZI-Prologi süsteemipredikaatid on väga sarnased LPA-Prologi süsteemipredikaatidega, erinevused on tavaliselt 'kõrgemat järku' predikaatides. Palju predikaate on defineeritud lisamoodulitega, mis tulevad nende kasutamiseks enne käsuga consult laadida (näiteks kõik nimistutega töötamise predikaadid (append, member, length , reverse, permutation, remove jne) on defineeritud moodulis util.pro ja need ei tööta, kui see modul (või selle kompileeritud versioon util.plm) ei ole laaditud.

Amzi-Prologis põhiline töö toimub interpretaatori aknas Listener. Programm (Prologi programm on ASCII-tekst) kirjutatakse editoris, salvestatakse (Save as, Save) ja laaditakse siis Listener'i aknasse käsuga consult või reconsult; nende erinevus on selles, et consult alati lisab uue faili teksti juba olemasoleva lõppu (seega kui seal kirjeldatakse mingi predikaat, mis on juba olemas, uut kirjeldust arvatavasti üldse ei leita!); reconsult võtab alati viimasena laaditud (consult'itud) faili ja asendab kõigi predikaatide kirjeldused uutega. Kui laaditavas tekstis kasutatakse mingeid predikaate, mille kirjeldusi see fail ise ei sisalda, tuleb enne laadida programm, kus need kirjeldused on, sest laadimise (consult, reconsult ajal) kontrollitakse programmi süntaksit ja kui leitakse predikaat, mille kirjeldust ei ole, laadimine peatub; sellect kohast saab üle, kui veateatele vastuseks sisestada c (continue), kuid vigast predikaati (predikaati, mis sisaldab paremal pool tundmatuid predikaate) ei laadita.

Kui on kindel, et mingi moodul töötab vigadeta, võib selle kompileerida käsuga compile laademooduliks (laiendiga .plm) ja laadida .pro mooduli asemel vastava .plm mooduli; erinevus on vaid selles, et nüüd moodulis kirjeldatud predikaate käsuga listing enam vaadat ei saa (ja neid ei saa ka parandada). Et näiteks kasutada programme, kus kasutatakse sõnu "ja", "voi" (pro "või"), "ei", tuleb algul sooritada consult('eesti.pro') või consult('eesti.plm').

Eesti.pro:

:-op(700,xfx,oleks).
:-op(1000,xfy,ja).
:-op(1100,xfy,voi).
:-op(900,fy,ei).

ja(X,Y) :- X, Y.
ei(X):- not (X).
voi(X,Y):-X;Y.
oleks(X,Y):-var(X),var(Y),!,X==Y.
oleks(X,Y):-(atom(X);atom(Y)),!, X=Y.
oleks(X,Y):-var(X),!,X is Y.
oleks(X,Y):-var(Y),!,Y is X.
oleks(X,Y):-Z is X,Z is Y.

lause(X):-clause(X,true).
lisa(X):-asserta(X).
eemalda(X):-retract(X).
eemalda_koik(X):-retractall(X).
uuesti:-fail.

loe(X):- read(X).
kirjuta(X):-write(X).
kirjuta_nimistu([]):-!,nl.
kirjuta_nimistu([X|Y]):- write(X),kirjuta_nimistu(Y).

max(L1,L2,L3):-(L2<L1,!,L3=L1;L3=L2).

rv:-nl.

yhenda([],X,X).
yhenda([X|Y],Z,[X|Y1]):-yhenda(Y,Z,Y1).

tahed(X,Y):-string_list(X,Y).
pikkus([X],1):-!.
pikkus([X|Y],N):-pikkus(Y,N1),!,N oleks N1+1.

esineb(X,Y):-member(X,Y). lahendid(Term,Tingimus,Nimistu):-findall(Term,Tingimus,Nimistu). %Nimistusse kantakse kõik Termid, mis taidavad tingimust Tingimus

tee(X):-X,!.
tee(X):-write(' Ei onnestu !'),nl,fail.


Küsimused, probleemid:

jaak@cc.ttu.ee

Tagasi loengute sisukorra juurde