Ответ в теме: DCG в SWI-Prolog

      Комментарии к записи Ответ в теме: DCG в SWI-Prolog отключены
#2468

aleator
Участник

Всё просто. Задаём вопрос по базе данных, программа отвечает на него. Выводит ответ, или Да/Нет.
В записях типа verb(X^Y^[actor_for(X,Y)]) --> [play] содержиться глагольная группа, по которой мы и ищем в БД значения.
Для меня главной сложностью является то, что я не понимаю правила по которому происходит разбор вопроса. В одних случаях мы вызываем statement — если вопрос содержит именную группу и глагольную группу. В других — только глагольную группу.

% для вопроса top([is, it, true, that, william, shatner, is, an, actor]).
top(Sentence):-
yesno3(Query, Sentence, []),
(Query,
write("Yes, that's true");write("Sorry, no")).	
yesno3(X) --> [is, it, true, that], statement(_^_^[Sem]),[right].
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^[actor_for(X,Y)]) --> [is, an, actor].

Данный код для этого вопроса у меня не работает вообще.