Ответ в теме: 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].

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