Problem bei Prolog mit Übersetzungen

27 views
Skip to first unread message

Hans

unread,
May 19, 2018, 6:46:20 AM5/19/18
to SWI-Prolog
Hey, ich bin gerade dabei in Prolog einen Übersetzer zu bauen. Der soll von Deutsch nach italienisch übersetzen. Zumindest für ganz bestimmte Sätze als Beispiel

So sieht mein Quellcode dafür aus:

satz(In) :- satz(In,[]).
satz(In,Rest) :- nominalphrase(_,nom,In,R), verbalphrase(R,Rest).
nominalphrase(Genus,Kasus,In,Rest) :- artikel(Genus, Kasus, In, R), nomen(Genus, R, Rest).
verbalphrase(In,Rest) :- verbintransitiv(In,Rest); verbtransitiv(In,R), nominalphrase(_,akk,R,Rest).

artikel(m,nom,In,Rest) :- match(A,In,Rest), member(A,[der,il]).
artikel(f,nom,In,Rest) :- match(A,In,Rest), member(A,[die,la]).
artikel(m,akk,In,Rest) :- match(A,In,Rest), member(A,[den,il]).
artikel(f,akk,In,Rest) :- match(A,In,Rest), member(A,[die,le]).

verbintransitiv(In,Rest) :- match(V, In, Rest), member(V,[schläft,dorme]).
verbtransitiv(In,Rest) :- match(V, In, Rest), member(V,[sieht,vede]).
verbtransitiv(In,Rest) :- match(V, In, Rest), member(V,[sehen,vedono]).

nomen(m,In,Rest) :- match(V,In,Rest),member(V,[mann,uomo]).
nomen(m,In,Rest) :- match(V,In,Rest),member(V,[männer,uomini]).
nomen(m,In,Rest) :- match(V,In,Rest),member(V,[kater,gatto]).
nomen(f,In,Rest) :- match(V,In,Rest),member(V,[frau,donna]).
nomen(f,In,Rest) :- match(V,In,Rest),member(V,[frauen,donne]).

match(X, [X|Rest], Rest).

Mein Problem ist, dass ich bei "satz([die, frauen, sehen, die, männer])." ein false bekomme. Warum kommt hier nicht true raus ? Ich hoffe ich könnt mir helfen.

Danke Hans

Pierpaolo Bernardi

unread,
May 19, 2018, 8:51:29 AM5/19/18
to Hans, SWI-Prolog

Il giorno 19 maggio 2018, alle ore 12:46, Hans <maste...@gmail.com> ha scritto:

>Mein Problem ist, dass ich bei "satz([die, frauen, sehen, die, männer])." ein false bekomme. Warum kommt hier nicht true raus ?

When staring at the code and reasoning does not help me find a bug, first I try trace.

Try: trace, satz(...)

HTH

Michael BEN YOSEF

unread,
May 19, 2018, 12:50:54 PM5/19/18
to SWI-Prolog
On Saturday, 19 May 2018 12:46:20 UTC+2, Hans wrote:
Mein Problem ist, dass ich bei "satz([die, frauen, sehen, die, männer])." ein false bekomme. Warum kommt hier nicht true raus ? Ich hoffe ich könnt mir helfen.

Danke Hans

Das Problem liegt mit dem Artikel für "männer". Der Artikel soll Genus "m" haben, wegen der nomen/3 Regel für "männer", und die Nominalphrase muss Akkusativ sein, also passt nur "den" wegen den artikel/4 Regeln. Das kann Mann zum Beispiel so sehen:

?- nominalphrase(Genus, Kasus, [die, männer], []).
false.

?- nominalphrase(Genus, Kasus, [den, männer], []).
Genus = m,
Kasus = akk ;
false.

Also stimmt etwas nicht in Ihren Regeln.
Reply all
Reply to author
Forward
0 new messages