8



Prologi andmetüübid

Iga AMZI-Prologis kasutatava andmetüübi jaoks on tavaliselt olemas ka predikaat, mis kontrollib, kas argument on seda tüüpi. Tüübid ja neid kontrollivad predikaadid on väga sarnased LPA-Prologi tüüpide ja vastavate predikaatidega.

atom - väiketähega algav tekstikonstant (tühikuteta); kui atomis tahetakse kasutada tühikut või kui atoma algab arvuga, peab selle võtma ülakomade vahele; kontrollib predikaat atom(X), näiteks:

?- atom(a).

yes
?- atom(a43).

yes
?- atom('a s').

yes
?- atom('a S 34').

yes

?- atom(5a).

no

integer - täisarv vahemikus -2147483648..2147483647 (s.t. 32-bitine); kontrollib predikaat integer(X) (kuid kui arv tegelikult on sellest vahemikust väljaspool, võib tulemus olla ettearvamatu, vt. allpool):

?- integer(200).

yes

?- X=2000000000000000, Y is X+1, integer(Y).

X = 1233977344 Y = 1233977345 no
?- X=80000000000, Y is 2*X, integer(X), integer(Y).

X = -1604378624 Y = 1086210048

yes

Predikaat atomic(X) kontrollib, kas argument on atom või täisarv, seega

?- atomic(5).

yes
?- atomic(asd).

yes
?- atomic('a S').

yes
?- atomic(200000000000).
no

Reaalarve (need ei või alata ega lõppeda punktiga, võib kasutada ka järku) kontrollib predikaat float(X):

?- float(4.5).

yes
?- float(-2.873572).

yes
?- float(-0.1e-20).

yes
?- float(2.3E50).

yes
?- float(.3).

Error #221: Unexpected operator

Predikaat number(X) on tõene, kui X väärtuseks on täis-või reaalarv:

?- number(3).

yes
?- number(-2.03e-200).

yes

String on sümbolite jada, mis on võetud dollarimärkide (erineb LPA-st!) vahele; stringe kontrollib predikaat string(X) (stringide töötlemiseks on palju sisseehitatud predikaate: string_atom(String, Atom), string_integer(String, Integer), string_length(String, Length) jne, vt. Help):

?- string($As we know$).

yes

Predikaat var(X) kontrollib, kas X on veel väärtustamata muutuja (s.t. kas X-l on juba väärtus):

?- var(X).

X = H83

yes
?- X is 3, var(X). %- siin "is" annab X-le väärtuse!
no

Predikaat nonvar(X) on tõene, kui muutujal X on juba väärtus.

Predikaat list(X) on tõene, kui X väärtuseks on nimistu:

?- list([a,s]).

yes
?- list([a,3,'4X']).

yes
?- list([a,3,4X]). /* nimistu element võib olla atom, kuid kui atom algab arvuga, peab ta olema võetud apostrofide vahele! */

Error #221: Unexpected operator

Kõige sagedamini programmis esinev andmetüüp on struktuur. Struktuur on määratud oma nime(ehk funktori) ja argumentidega; struktuurid on näiteks kõik faktid (fakti kirjelduse lõpus olev punkt ei kuulu struktuuri!):

kaidud(a1)
valetab(lovi, esmaspaev)
kestab(london, suess, 7)

Struktuuri süntaksit kontrollib predikaat structure(X):

?- structure(tupik(a1)).

yes



Küsimused, probleemid:

jaak@cc.ttu.ee

Tagasi loengute sisukorra juurde