Венгерский язык. Морфология.
haz-as-sag-om-bol
house-adj-nom-poss.1sg-ela
„from my house“ (elativ)
haz – house, auto – car, varos – city, könyv – book, szek – chair, kör – circle
om – суффикс единственного числа.
Автомат должен включать в себя 48 слов: единственное и множественное число и 4 падежа. Также необходимо, чтобы автомат выдавал перевод корня и категории.
Например:
?- automat(ungarisch, U), akzeptiert(U, ['haz','ak','ban'], M).
M = ['house', num:pl, kas:inessiv]
?- automat(ungarisch, U), akzeptiert(U, ['kör','om','böl'], M).
M = ['circle', num:sg, kas:elativ]
Исходный код программы:
automat(ungarisch,
([1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25],
[
haz,
auto,
varos,
konyv,
szek,
kor,
om,
ak,
k,
ok,
ek,
ok,
ba,
be,
ban,
ben,
bol,
bol,
nal,
nel],
0,
[4,5,6,7,16,17,18,19],
[
delta(0,haz,1),
delta(1,om,2),
delta(2,ba,4),
delta(2,ban,5),
delta(2,bol,6),
delta(2,nal,7),
delta(1,ak,3),
delta(3,ba,4),
delta(3,ban,5),
delta(3,bol,6),
delta(3,nal,7),
delta(0,auto,8),
delta(8,om,9),
delta(9,ba,4),
delta(9,ban,5),
delta(9,bol,6),
delta(9,nal,7),
delta(8,k,10),
delta(10,ba,4),
delta(10,ban,5),
delta(10,bol,6),
delta(10,nal,7),
delta(0,varos,11),
delta(11,om,12),
delta(12,ba,4),
delta(12,ban,5),
delta(12,bol,6),
delta(12,nal,7),
delta(11,ok,13),
delta(13,ba,4),
delta(13,ban,5),
delta(13,bol,6),
delta(13,nal,7),
delta(0,konyv,14),
delta(14,om,15),
delta(15,be,16),
delta(15,ben,17),
delta(15,bol,18),
delta(15,nel,19),
delta(14,ek,20),
delta(20,be,16),
delta(20,ben,17),
delta(20,bol,18),
delta(20,nel,19),
delta(0,szek,21),
delta(21,om,20),
delta(22,ek,20),
delta(0,kor,23),
delta(23,om,24),
delta(24,be,16),
delta(24,ben,17),
delta(24,bol,18),
delta(24,nel,19),
delta(23,ok,25),
delta(25,be,16),
delta(25,ben,17),
delta(25,bol,18),
delta(25,nel,19)
],
[(haz,house),(auto,car),(varos,city),(konyv,book),(szek,chair),(kor,circle),
(om,num:sg),(ak,num:pl),(k,num:pl),(ok,num:pl),(ek,num:pl),(ok,num:pl),
(ba,kas:illativ),(be,kas:illativ),
(ban,kas:inessiv),(ben,kas:inessiv),
(bol,kas:elativ),(bol,kas:elativ),
(nal,kas:adessiv),(nel,kas:adessiv)])
).
%%%% QUELLCODE %%%%
% akzeptiert(AutomatalsTupel, WortalsListe)
akzeptiert(Automat, Wort,M) :-
Automat = (_,_,Start,_,_,_),
akzeptiert_(Automat, Wort, Start,M).
akzeptiert_(Automat, [], Zustand,[]) :-
Automat = (_,_,_,Endzustaende,_,_),
member(Zustand, Endzustaende).
akzeptiert_(Automat, [Symbol|Rest], Zustand,[R|MTail]) :-
Automat = (_,_,_,_,Delta,Razbor),
member(DeltaX, Delta),
DeltaX = delta(Zustand, Symbol, NeuerZustand),
akzeptiert_(Automat, Rest, NeuerZustand,MTail),
member((Symbol,R),Razbor).
% A =
% d.h. Zustaende, Alphabet, Startzustand, Endzustaende, Ubergaenge
% "a1" ist der Automat mit der folgenden Spezifikation
|