我试图通过在Prolog中使用DCG来获得英语句子的语义表示。
这是我应该瞄准的结果:
?- s(Sem,[john,sleeps],[]).
Sem=sleeps(john).
这是我目前的状态:
?- s(Sem, [john,sleeps],[]).
Sem = (sleeps,john).
我的问题如下:我真的不知道我应该如何将我的动词放在括号之外。 我使用的是简单的DCG:
s((VP,NP)) --> np(NP), vp(VP).
s((VP,NP,OBJ)) --> np(NP), vp(VP,OBJ).
np(NP) --> pn(NP).
np(np(det(D),N)) --> det(D),n(N).
np(np(det(D),a(A),N)) --> det(D),a(A),n(N).
n(n(N)) --> cn(N).
vp(V)--> iv(V).
vp(V,OBJ) --> tv(V), np(OBJ).
iv(sleeps) --> [sleeps].
tv(likes) --> [likes].
tv(hates) --> [hates].
det(the) --> [the].
det(a) --> [a].
a(red) --> [red].
a(green) --> [green].
cn(book) --> [book].
cn(table) --> [table].
pn(john) --> [john].
pn(mary) --> [mary].
我感谢任何帮助,因为我还是编程的初学者,特别是在prolog中。