DCG в SWI-Prolog-е
Формулировка задачи:
Есть простенький рабочий код:
Вопрос обрабатывает корректно.
Пытаюсь его изменить для другого вопроса - не работает. В чём дело?
Листинг программы
- % top([is, it, true, that, mark, hamill, acts, in, star, wars, iv]).
- top(Sentence) :-
- yesno(Query, Sentence, []),
- Query,
- write("Yes, that's true").
- yesno(Sem) --> [is, it, true, that], 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^[acts_in(X,Y)]) --> [acts, in].
- actor(mark_hamill).
- acts_in(mark_hamill, star_wars4).
- proper_noun(mark_hamill) --> [mark, hamill].
- proper_noun(star_wars4) --> [star, wars, iv].
Листинг программы
- % 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(Subj^Obj^Sem).
- noun_phrase(Sem) --> proper_noun(Sem).
- verb(X^Y^playing(X,Y)) --> [play].
- actor(mark_hamill).
- acts_in(mark_hamill, star_wars4).
- playing(mark_hamill, spock).
- proper_noun(mark_hamill) --> [mark, hamill].
- proper_noun(star_wars4) --> [star, wars, iv].
Решение задачи: «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].
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д