Пролог, грамматика с определенными предложениями

Код, который я написал для грамматики определенных предложений. Я очень внимательно следил за книгой "Learn Prolog Now"

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 ([студент, делает, его, задание], []). ОШИБКА: вне локального стека

Я уже пробовал переместить лексикон, но это не сработало. Что касается синтаксических ошибок, то при компиляции ничего не было обнаружено.

Извините, если я плохо написал вопрос, но я не знаю, что еще сказать, если вам нужна дополнительная информация о коде, оставьте комментарий, и я постараюсь ответить как можно лучше.


person Edward Bamber    schedule 14.05.2013    source источник


Ответы (1)


проблема в том, что s // 0 рекурсивно слева. Вам следует изменить первое правило. Например

s --> p, conj, s.
p --> np(X),vp(X).
...
person CapelliC    schedule 14.05.2013