Программирование в Логике. Чанышев О.Г. - 21 стр.

UptoLike

Составители: 

41
Предикат repeat используется в разделе goal для организации цик-
ла по обработке вопросов.
domains
кто=symbol
что=symbol
facts – f1
увлечение(кто,что)
кто(кто)
что(что)
predicates
nondeterm repeat
nondeterm ответить(symbol)
ответить_что(кто)
ответить_кто(что)
анализ_КтоЧто(symbol)
спросить
goal
consult("hobbyNew.dbs",f1),
repeat,
спросить,
retractall(кто(_)),
retractall(что(_)),
write("Есть вопросы? (Д|Н)"),
readchar(ДаНет),
ДаНет='Н',exit().
clauses
repeat.
repeat:-repeat.
ответить(""):-
кто(Кто),
что(Что),
увлечение(Кто,
Что),!,
write("Да");
кто(Кто),
что(Что),
not(увлечение(Кто,Что)),!,
42
write("Нет");
кто(Кто),
not(что(_)),!,
write(Кто,".Хобби:"),nl,
ответить_что(Кто);
что(Что),
not(кто(_)),!,
write(Что," является увлечением для:"),nl,
ответить_кто(Что);
!,write("Не понял"),nl.
ответить(Запрос):-
fronttoken(Запрос,Лексема,Остаток),!,
анализ_КтоЧто(Лексема),
ответить(Остаток).
анализ_КтоЧто(Лексема):-
увлечение(Лексема,_),!, assert(кто(Лексема));
увлечение(_,Лексема),!, assert(что(Лексема));
!.
ответить_кто(Что):-
увлечение(
Кто,Что),
write(Кто),nl,
fail.
ответить_кто(_).
ответить_что(Кто):-
увлечение(Кто,Что),
write(Что),nl,
fail.
ответить_что(_).
спросить:-
write("Введите Ваш вопрос:"),nl,
readln(Вопрос),
ответить(Вопрос),!;
!.
Предикат repeat используется в разделе goal для организации цик-   write("Нет");
ла по обработке вопросов.
      domains                                                      кто(Кто),
      кто=symbol                                                   not(что(_)),!,
      что=symbol                                                   write(Кто,".Хобби:"),nl,
      facts – f1                                                   ответить_что(Кто);
      увлечение(кто,что)
      кто(кто)                                                     что(Что),
      что(что)                                                     not(кто(_)),!,
      predicates                                                   write(Что," является увлечением для:"),nl,
      nondeterm repeat                                             ответить_кто(Что);
      nondeterm ответить(symbol)
      ответить_что(кто)                                            !,write("Не понял"),nl.
      ответить_кто(что)
      анализ_КтоЧто(symbol)                                        ответить(Запрос):-
      спросить                                                     fronttoken(Запрос,Лексема,Остаток),!,
      goal                                                         анализ_КтоЧто(Лексема),
      consult("hobbyNew.dbs",f1),                                  ответить(Остаток).
      repeat,                                                      анализ_КтоЧто(Лексема):-
      спросить,                                                    увлечение(Лексема,_),!, assert(кто(Лексема));
      retractall(кто(_)),                                          увлечение(_,Лексема),!, assert(что(Лексема));
      retractall(что(_)),                                          !.
      write("Есть вопросы? (Д|Н)"),                                ответить_кто(Что):-
      readchar(ДаНет),                                             увлечение(Кто,Что),
      ДаНет='Н',exit().                                            write(Кто),nl,
      clauses                                                      fail.
      repeat.                                                      ответить_кто(_).
      repeat:-repeat.                                              ответить_что(Кто):-
      ответить(""):-                                               увлечение(Кто,Что),
      кто(Кто),                                                    write(Что),nl,
      что(Что),                                                    fail.
      увлечение(Кто,Что),!,                                        ответить_что(_).
      write("Да");                                                 спросить:-
                                                                   write("Введите Ваш вопрос:"),nl,
     кто(Кто),                                                     readln(Вопрос),
     что(Что),                                                     ответить(Вопрос),!;
     not(увлечение(Кто,Что)),!,                                    !.

                                  41                                                          42