Prolog,Definite Clause Grammar

时间:2013-05-14 17:50:36

标签: prolog dcg

我为一个明确的子句语法编写了一些代码 我非常仔细地阅读了“现在学习Prolog”一书

lex(the,det(single)).
lex(the,det(plural)).
lex(a,det(single)).
lex(some,det(plural)).
lex(at,det(single)).

lex(student,n(single)).
lex(students,n(plural)).
lex(assignment,n(single)).
lex(assignments,n(plural)).
lex(teacher,n(single)).
lex(teachers,n(plural)).
lex(lecture,n(single)).
lex(lecture,n(plural)).
lex(school,n(single)).
lex(home,n(single)).

lex(does,v(single)).
lex(do,v(plural)).
lex(corrects,v(single)).
lex(correct,v(plural)).
lex(writes,v(single)).
lex(write,v(plural)).
lex(gives,v(single)).
lex(give,v(plural)).

lex(his,pro(single)).
lex(her,pro(single)).
lex(their,pro(plural)).

lex(and,conj).
lex(while,conj).

s--> s, conj, s.
s--> np(X),vp(X).
np(X)--> det(X),n(X);pro(X), n(X).
vp(X)--> v(X), np(X).
vp(X)--> v(X).
det(X)--> [A],{lex(A,det(X))}.
pro(X)--> [A],{lex(A,pro(X))}.
v(X)--> [A],{lex(A,v(X))}.
n(X)--> [A],{lex(A,n(X))}.

以下是我询问上述代码的查询

3? - s([学生,他,他的,作业],[])。 错误:超出本地堆栈

我已经尝试重新定位词典,但这不起作用 至于语法错误,编译时没有任何东西被提取

很抱歉,如果我没有写好问题,但我不知道还有什么要说的,如果您需要更多关于代码的信息,请发表评论,我会尽力回答。

1 个答案:

答案 0 :(得分:1)

问题是s // 0是递归的。你应该修改第一条规则。 例如

s --> p, conj, s.
p --> np(X),vp(X).
...