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

UptoLike

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

45
write("Есть вопросы? (Д|Н)"),
readchar(ДаНет),
ДаНет='Н',!,exit().
clauses
repeat.
repeat:-repeat.
ответить(""):-
кто(Кто),
что(Что),
отн(Отношение),!,
ответ1(Кто,Отношение,Что);
кто(Кто),
что(Что),
not(отн(_)),ф(Кто,_,Что),!,
ответ2(Кто,Что);
кто(Кто),
отн(Отношение),
not(что(_)),!,
ответ3(Кто,Отношение);
кто(Кто),
not(отн(_)),
not(что(_)),!,
ответ4(Кто);
not(
кто(_)),
отн(Отношение),
что(Что),!,
ответ5(Отношение,Что);
not(кто(_)),
отн(Отношение),
not(что(_)),!,
ответ6(Отношение);
46
not(кто(_)),
not(отн(_)),
что(Что),!,
ответ7(Что);
!,write("Не понял"),nl.
ответить(Запрос):-
fronttoken(Запрос,Лексема,Остаток),
анализ_КтоОтношениеЧто(Лексема),
ответить(Остаток).
анализ_КтоОтношениеЧто(Лексема):-
поиск_кто(Лексема),!;
поиск_отношения(Лексема),!;
поиск_что(Лексема),!;
!.
поиск_кто(Лексема):-
not(кто(_)),
ф(Лексема,_,_),!,assert(кто(Лексема));
not(кто(_)),искать_синоним_кто(Лексема),!;!,fail.
поиск_отношения(Лексема):-
not(отн(_)),
ф(_,Лексема,_),!,assert(отн(Лексема));
not(отн(_)),искать_синоним_отношения(Лексема),!;!,fail.
поиск_что(Лексема):-
not(что(_)),
ф(_,_,Лексема),!,assert(что(Лексема));
not(что(_)),искать_синоним_что(Лексема),!;!,fail.
искать_синоним_кто(Лексема):-
соб(Кто,СписокКто),
загрузить_список(СписокКто),
временно(Лексема),!,
retractall(временно(_)),assert(кто(Кто));
write("Есть вопросы? (Д|Н)"),      not(кто(_)),
readchar(ДаНет),                   not(отн(_)),
ДаНет='Н',!,exit().                что(Что),!,
                                   ответ7(Что);
clauses
repeat.                            !,write("Не понял"),nl.
repeat:-repeat.
                                   ответить(Запрос):-
ответить(""):-                     fronttoken(Запрос,Лексема,Остаток),
кто(Кто),                          анализ_КтоОтношениеЧто(Лексема),
что(Что),                          ответить(Остаток).
отн(Отношение),!,
ответ1(Кто,Отношение,Что);         анализ_КтоОтношениеЧто(Лексема):-
                                   поиск_кто(Лексема),!;
кто(Кто),                          поиск_отношения(Лексема),!;
что(Что),                          поиск_что(Лексема),!;
not(отн(_)),ф(Кто,_,Что),!,        !.
ответ2(Кто,Что);
                                   поиск_кто(Лексема):-
кто(Кто),                          not(кто(_)),
отн(Отношение),                    ф(Лексема,_,_),!,assert(кто(Лексема));
not(что(_)),!,
                                   not(кто(_)),искать_синоним_кто(Лексема),!;!,fail.
ответ3(Кто,Отношение);
                                   поиск_отношения(Лексема):-
кто(Кто),
                                   not(отн(_)),
not(отн(_)),
                                   ф(_,Лексема,_),!,assert(отн(Лексема));
not(что(_)),!,
ответ4(Кто);                       not(отн(_)),искать_синоним_отношения(Лексема),!;!,fail.

not(кто(_)),                       поиск_что(Лексема):-
отн(Отношение),                    not(что(_)),
что(Что),!,                        ф(_,_,Лексема),!,assert(что(Лексема));
ответ5(Отношение,Что);             not(что(_)),искать_синоним_что(Лексема),!;!,fail.
                                   искать_синоним_кто(Лексема):-
not(кто(_)),                       соб(Кто,СписокКто),
отн(Отношение),                    загрузить_список(СписокКто),
not(что(_)),!,                     временно(Лексема),!,
ответ6(Отношение);                 retractall(временно(_)),assert(кто(Кто));

                              45                             46