Hej och välkommen till Webforum
Det kanske är ont om Prolog experter här på webforum.
Här finns ett annat forum: http://www.tek-tips.com/threadminder.cfm?pid=345
Vi får se om någon klarar att svara på detta här
1 svar · 376 visningar · startad av CombatAnna
Jag vill göra en shift reduce-parser (för språkteknologisk användning) som skall ge outputten:
X = [(s, (np, jag), vp, (vTr, hatade), n, motet)]
På frågan:
parse([jag,hatade,motet],X).
Men i nuläget ger programmet svaret:
X=[]
Jag trodde att jag i basfallet sa att accepterandestadiet ska vara en lista som börjar på (s. Det gör mig ganska förvirrad att svaret i nuläget kan bli tomma listan. Tracear man så ser man att programmet kommer fram till rätt lösning, just innan den börjar tömma stacken igen. Och returnerar följaktligen en tom lista.
Mitt program ser ut så här:
:-op(500,xfx,::).
:-op(500,xfx,--->).
np::jag.
vTr::hatade.
n::motet.
s --->[np,vp].
np --->[n].
vp --->[vTr, n].
parse([],[(s,_)]).
% Shift
parse([Word|Words],Stack):-
(Cat :: Word),
parse(Words,[(Cat,Word)|Stack]).
% Reduce för regel -> 1 kategori
parse(Input,[(Cat,Word)|Stack]):-
VH ---> [Cat],
parse(Input,[(VH,(Cat,Word))|Stack]).
% Reduce för regel -> 2 kategorier
parse(Input,[(Cat2,Word2),(Cat1,Word1)|Stack]):-
VH ---> [Cat1,Cat2],
parse(Input,[(VH,(Cat1,Word1),(Cat2,Word2))|Stack]).
Någon som ser vad jag har gjort fel?
Det kanske t.o.m är uppenbart för en rutinerad, till skillnad mot mig
Hej och välkommen till Webforum
Det kanske är ont om Prolog experter här på webforum.
Här finns ett annat forum: http://www.tek-tips.com/threadminder.cfm?pid=345
Vi får se om någon klarar att svara på detta här