![]() |
![]() |
![]() |
![]() |
vokaal(a).
vokaal(e).
vokaal(i).
vokaal(o).
vokaal(u).
vokaal(y).
vokaal('õ').
vokaal('ä').
vokaal('ö').
vokaal('ü').
konsonant(Taht):-
Sõna silbitamiseks tuleb sõna algul muuta tähtede
nimistuks (muidu ei ole võimalik määrata, millised tähed
on vokaalid, millised konsonandid). Sõna (Prologi terminoloogias
aatomi) muudab tähtede nimistuks predikaat tahejada
. Kuna seda predikaati tuleb kasutada mõlemas suunas
- algul sõnast tähtede jada moodustamiseks ja siis silbi tähtede
jadast silbi saamiseks, kontrollitakse systeemipredikaadiga atom(X)
algul, kas esimesel muutujal on väärtus
ja jagatakse seejärel aatom selle tähtede nimistuks; kui teisel
muutujal (tähtede nimistul) on väärtus, liidetakse selle
elemendid üheks aatomiks kasutades süsteemipredikaati atomlist_concat(List,Atom)
.
Ühetähelise aatomi tähtede nimistu koosneb vaid sellest
tähest ja pikema puhul kasutatakse predikaati rekursiivselt:
tahejada(A,[A]):-
tahejada(Atom,[A|List]):-
Aatomi algustähe eraldamiseks kasutatakse AMZI-Prologi systeemipredikaati atom_concat(A1,A2,A) , mis kas liidab aatomid A1 ja A2 aatomiks A (s.t. kui selle esimeseks ja teiseks argumendiks on aatomid ja kolmas on muutuja) või jagab kolmanda argumendina antud aatomi kõikvõimalikel viisidel (backtrackingu juures) kaheks aatomiks; sellisel juhul peavad mõlemad esimesed kaks argumenti olema muutujad ja kolmas - aatom:
algustaht(Atom,A,Muud):-
Tähtede nimistu muudetakse silpide nimistuks ja väljastatakse:
silbita(Sona) :-
Tähtede nimistust saadakse silpide nimistu, eristades algul nimistust esimese silbi tähed. Esimest silpi moodustavate tähtede nimistu ei või olla tühi ega koosneda vaid ühest konsonandist. Kui need tingimused on täidetud ja järgnevad tähed sobivad uue silbi alustamiseks (esimene täht - konsonant, teine - vokaal), muudetakse esimesele silbile vastav tähtede nimistu taas silbiks (aatomiks). Kui järelejäänud tähtede seast uut silpi eraldada enam ei ole võimalik, muudetakse kõik järelejäänud tähed silbiks.
silbinimistu(Tahed,[Silp|Silbid]) :-
Silp algab konsonandiga, millele järgneb vokaal:
silbialgus([X,Y|_]) :-
Predikaat yksikkonsonant kontrollib, kas tähtede nimistu koosneb ainult ühest konsonandist:
yksikkonsonant([K]) :-
Silbinimistu väljastatakse, eristades silbid üksteisest sidekriipsuga:
valjasta([X]) :-