DCG в SWI-Prolog-е

Узнай цену своей работы

Формулировка задачи:

Есть простенький рабочий код:
Листинг программы
  1. % top([is, it, true, that, mark, hamill, acts, in, star, wars, iv]).
  2. top(Sentence) :-
  3. yesno(Query, Sentence, []),
  4. Query,
  5. write("Yes, that's true").
  6. yesno(Sem) --> [is, it, true, that], statement(_^_^[Sem]).
  7. statement(Subj^Obj^Sem) -->
  8. noun_phrase(Subj),
  9. verb_phrase(Subj^Obj^Sem).
  10. noun_phrase(Sem) --> proper_noun(Sem).
  11. verb_phrase(Subj^Obj^Sem) -->
  12. verb(Subj^Obj^Sem),
  13. noun_phrase(Obj).
  14. verb(X^Y^[acts_in(X,Y)]) --> [acts, in].
  15. actor(mark_hamill).
  16. acts_in(mark_hamill, star_wars4).
  17. proper_noun(mark_hamill) --> [mark, hamill].
  18. proper_noun(star_wars4) --> [star, wars, iv].
Вопрос обрабатывает корректно. Пытаюсь его изменить для другого вопроса - не работает. В чём дело?
Листинг программы
  1. % top([did, mark, hamill, play, spock]).
  2. top(Sentence) :-
  3. yesno(Query, Sentence, []),
  4. Query,
  5. write("Yes, that's true").
  6. yesno(Sem) --> [did], statement([Sem]^_^_).
  7. statement(Subj^Obj^Sem) -->
  8. noun_phrase(Subj),
  9. verb(Subj^Obj^Sem).
  10. noun_phrase(Sem) --> proper_noun(Sem).
  11. verb(X^Y^playing(X,Y)) --> [play].
  12. actor(mark_hamill).
  13. acts_in(mark_hamill, star_wars4).
  14. playing(mark_hamill, spock).
  15. proper_noun(mark_hamill) --> [mark, hamill].
  16. proper_noun(star_wars4) --> [star, wars, iv].

Решение задачи: «DCG в SWI-Prolog-е»

textual
Листинг программы
  1. % top([did, mark, hamill, play, spock]).
  2.  
  3. top(Sentence) :-
  4.   yesno(Query, Sentence, []),
  5.   Query,
  6.   write("Yes, that's true").
  7.  
  8. yesno(Sem) --> [did], statement(_^_^[Sem]).
  9.  
  10. statement(Subj^Obj^Sem) -->
  11.    noun_phrase(Subj),
  12.    verb_phrase(Subj^Obj^Sem).
  13.  
  14. noun_phrase(Sem) --> proper_noun(Sem).
  15.  
  16. verb_phrase(Subj^Obj^Sem) -->
  17.   verb(Subj^Obj^Sem),
  18.   noun_phrase(Obj).
  19.  
  20. verb(X^Y^[playing(X,Y)]) --> [play].
  21.  
  22. playing(mark_hamill,spock).
  23. proper_noun(mark_hamill) --> [mark, hamill].
  24. proper_noun(spock) --> [spock].

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут