Prolog

时间:2017-05-20 09:10:27

标签: syntax prolog dcg

我试图通过在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中。

0 个答案:

没有答案