DCG в SWI-Prolog-е
Формулировка задачи:
Есть простенький рабочий код:
Вопрос обрабатывает корректно.
Пытаюсь его изменить для другого вопроса - не работает. В чём дело?
Решение задачи: «DCG в SWI-Prolog-е»
textual
Листинг программы
% top([did, mark, hamill, play, spock]).
top(Sentence) :-
yesno(Query, Sentence, []),
Query,
write("Yes, that's true").
yesno(Sem) --> [did], statement(_^_^[Sem]).
statement(Subj^Obj^Sem) -->
noun_phrase(Subj),
verb_phrase(Subj^Obj^Sem).
noun_phrase(Sem) --> proper_noun(Sem).
verb_phrase(Subj^Obj^Sem) -->
verb(Subj^Obj^Sem),
noun_phrase(Obj).
verb(X^Y^[playing(X,Y)]) --> [play].
playing(mark_hamill,spock).
proper_noun(mark_hamill) --> [mark, hamill].
proper_noun(spock) --> [spock].