160
имя_користувача :-
write ("Як Вас звати? "),
readln (Имя), nl, retractall (користувач (_)), asserta (користувач (Имя)).
питання (R):-
користувач (Имя), write ("Запитуйте, ", Имя, ": "),
readln (Rech), small_sym (Rech, ModRechen), lexanaliz (ModRechen, R).
вiдповiдь (R):-
ключовi_слова (L, Слово, 1), member_list (Слово, R),
е_маршрут (A, B, M1), маршрут (A, B, M, S),
not (member_list (M, M1)), not (е_маршрут (A, B, M)),
write ("\nВiдповiдаю: ", L, " <", A, "-", B, "> -\n", M),
write ("; вiдстань - ", S, "км."), nl, nl,
assertz (е_маршрут (A, B, M)), !.
вiдповiдь (R) :-
ключовi_слова (L, Слово, 1), member_list (Слово, R), е_маршрут(A,B,_),
write ("\nПроглянуто всi можливi маршрути <", A, "-", B, ">!"), nl, nl, !.
вiдповiдь (R) :-
ключовi_слова (L, Слово, 2), member_list (Слово, R),
визначити_мiста (R, A, B), мiн_маршрут (A, B, K, S),
write ("\nВiдповiдаю: ", L , " <", A , "-", B , "> -\n", K ),
write ("; вiдстань - ", S, "км."), nl, nl,
retractall (е_маршрут (_, _, _)),
assertz (е_маршрут (A, B, K)), !.
вiдповiдь (R) :-
ключовi_слова (L, Слово, 3), member_list (Слово, R),
визначити_мiста (R, A, B), мiн_маршрут (A, B, K, S),
write ("\nВiдповiдаю: Найкоротша ", L, " - ", S, "км."),
retractall (е_маршрут (_, _, _)),
assertz (е_маршрут (A, B, K)), nl, nl, !.
вiдповiдь (R) :-
ключовi_слова (L, Слово, 4),
member_list (Слово, R),
карта (List, _),
write ("\t\tСписок мiст:\n", List), nl, nl, !.
вiдповiдь (_) :-
write ("\nПомилка формулювання питання! Повторiть питання."),
write ("\n (Завершити роботу з ЕС - <Ctrl+Break>)"), nl, !.
ключовi_слова ( "Iнший маршрут", W, 1 ) :-
W = [iнша]; W = [iнший]; W = [по, iншому] ; W = [як, ще]; W = [яка,
ще];
W = [якось, ще]; W = [який, ще]; W = [по, другому].
ключовi_слова ( маршрут, W, 2 ) :-
W = [шлях]; W = [маршрут]; W = [добратися]; W = [доiхати].
ключовi_слова ( вiдстань, W, 3 ) :- W = [вiдстань].
ключовi_слова ( мiста, W, 4) :-
W = [якi, мiста]; W = [список, мiст]; W = [якi, населенi, пункти].