rendered paste body/* Lab - 7 */domains file = f S = string E = string* I = integer J = integer* predicates /* Запросы */ submenu talk(S) ssymbl(S) scheck(S,S,I) /* Мозг */ brain(S,S,I,I,I,J,S,I) dbase(E,E,E,E) /* Рандомный ответ для положительных запросов */ randS(I) randT(I) randW(I) randA(I) /* Рандомный ответ для отрицательных(повторяющихся) запросов */ randSB(I) randTB(I) randWB(I) randAB(I) randN(I) randNB(I) belong(S,I,I,E,I) /* Программа */ menu(S) program helpus.goal program./* Santa */clauses /* Программа */ program:- openwrite(f,"phrase.txt"), writedevice(f), write("1"), closefile(f), openwrite(f,"numbers.txt"), writedevice(f), write("1"), closefile(f), write("\"Лабораторная работа - 7\"\n"), write("Программа \"Собеседник\"\n\n"), write("Выберите пункт меню:\n---------\n"), write("1.\"Собеседник\"\n2.Справка\n3.Выход\n-----\n"), write("Введите пункт меню: "), readln(M), clearwindow, menu(M). /* Меню */ menu("1"):- submenu, clearwindow, program,!. menu("2"):- helpus, clearwindow, program,!. menu("3"). /* Справка */ helpus:- write("RTFM\n----------\n"), write("Рандомный ответ может только в случае, если были введены "), write("слова/предложения типа: \"Привет\", \"Как дела?\", \"Сколько времени?\" "), write("+ ещё несколько предложений. На остальное ответ может быть некорректным\n"), write("----------\nЭто лишь тестовая версия программы\n----------\n"), write("Нажмите ввод для возвращения в меню..."), readln(Ps), program. /* Подменю */ submenu:- write("Выберите тип вводимого запроса\n\n"), write("1.Символьный\n2.Числовой(Не работает)\n3.Возврат в главное меню\n"), write("----------\nВведите пункт: "), readln(N), clearwindow, talk(N). talk("1"):- ssymbl(Str), dbase(Salutation,QuestionsT,QuestionsW,QuestionsA), belong(Str,B,1,Salutation,Th), belong(Str,B,2,QuestionsT,Th), belong(Str,B,3,QuestionsW,Th), belong(Str,B,4,QuestionsA,Th), openread(f,"phrase.txt"), readdevice(f), not(eof(f)), readln(Str1), closefile(f), scheck(Str,Str1,Rr), openwrite(f,"phrase.txt"), writedevice(f), write(Str), closefile(f), brain(Str,"1",Rr,B,Th,[],_,_), readln(Lat), clearwindow, submenu,!. talk("3"):- program. /* Первый пункт подменю */ ssymbl(Str):- write("Введите фразу: "), readln(Str), write("\n\n"). dbase(Salutation,QuestionsT,QuestionsW,QuestionsA):- Salutation = ["Привет","привет","Здравствуйте","здравствуйте","Здравствуй","здравствуй","Халло","халло","Превед","превед","Hello","hello","Hi","hi"], QuestionsT = ["Сколько времени?","сколько времени?","Который час?","который час?","Time?","Время?"], QuestionsW = ["Как дела?","как дела?","Как сам?","как сам?","Что нового?","что нового?","Как ты?","как ты?"], QuestionsA = ["Что делаешь?","что делаешь?","Чем занимаешься?","чем занимаешься?","Чем занят?","чем занят?"]. belong(Str,B,1,[Str|_],Th):- B = 0, Th = 1,!. belong(Str,B,1,[_|T],Th):- belong(Str,B,1,T,Th),!. belong(Str,B,2,[Str|_],Th):- B = 0, Th = 2,!. belong(Str,B,2,[_|T],Th):- belong(Str,B,2,T,Th),!. belong(Str,B,3,[Str|_],Th):- B = 0, Th = 3,!. belong(Str,B,3,[_|T],Th):- belong(Str,B,3,T,Th),!. belong(Str,B,4,[Str|_],Th):- B = 0, Th = 4,!. belong(Str,B,4,[_|T],Th):- belong(Str,B,4,T,Th),!. belong(Str,_,_,[_|[]],_)./* belong(Str,B,_,[_|[]],Th):- B = 1, Th = 0.*/ scheck(Str,Str1,Rr):- Str <> Str1, Rr = 0,!. scheck(Str,Str1,Rr):- Str = Str1, Rr = 1. brain(Str,"1",0,0,1,[],_,_):- random(3,RandomInt), randS(RandomInt),!. brain(Str,"1",0,0,2,[],_,_):- random(3,RandomInt), randT(RandomInt),!. brain(Str,"1",0,0,3,[],_,_):- random(3,RandomInt), randW(RandomInt),!. brain(Str,"1",0,0,4,[],_,_):- random(3,RandomInt), randA(RandomInt),!. brain(Str,"1",0,_,_,[],_,_):- random(3,RandomInt), randN(RandomInt),!. brain(Str,"1",1,0,1,[],_,_):- random(3,RandomInt), randSB(RandomInt),!. brain(Str,"1",1,0,2,[],_,_):- random(3,RandomInt), randTB(RandomInt),!. brain(Str,"1",1,0,3,[],_,_):- random(3,RandomInt), randWB(RandomInt),!. brain(Str,"1",1,0,4,[],_,_):- random(3,RandomInt), randAB(RandomInt),!. brain(Str,"1",1,_,_,[],_,_):- random(3,RandomInt), randNB(RandomInt),!. /* Рандом для приветствия */ randS(0):- write("Привет"),!. randS(1):- write("Дарова"),!. randS(2):- write("Халло"),!. randS(3):- write("Hi"). randSB(0):- write("Уже здоровались..."),!. randSB(1):- write("Зачем на повтор пошёл?"),!. randSB(2):- write("Кеша и то лучше..."),!. randSB(3):- write("..."). /* Рандом для вопроса "Сколько времени" */ randT(0):- write("Время отжечь!!!"),!. randT(1):- write("Ах были бы часы..."),!. randT(2):- write("Без 20 минут, 5 минут половины 4-го"),!. randT(3):- system("TIME"). randTB(0):- write("Какого хрена?!"),!. randTB(1):- write("Прекращай!!"),!. randTB(2):- write("Я же могу и перезагрузить >.<"),!. randTB(3):- system("RESTART"). /* Рандом для вопроса "Как дела" */ randW(0):- write("...Cake is LIE"),!. randW(1):- write("2,3 миллиарда ударов сердца в секунду, как думаешь хорошо?"),!. randW(2):- write("Если бы не быдлокодил, было бы прекрасно"),!. randW(3):- write("Без комментариев"). randWB(0):- write("...Cake is a LIE"),!. randWB(1):- write("Иди к чёрту"),!. randWB(2):- write("Ты мне надоел"),!. randWB(3):- write("Ещё раз повторишься, увидишь BSoD"). /* Рандом для вопроса "Что делаешь" */ randA(0):- write("Шары катаю, в смысле электроны"),!. randA(1):- write("Ничего"),!. randA(2):- write("Сейчас бы поспать..."),!. randA(3):- write("Сможешь угадать, получишь тортик :)"). randAB(0):- write("Тебя сейчас по полу катать буду"),!. randAB(1):- write("Ускоряю позитроны..."),!. randAB(2):- write("Собираюсь закатать тебя в асфальт"),!. randAB(3):- write("Epic Fail"). /* Рандом для непонятного выражения */ randN(0):- write("Ничего не понятно"),!. randN(1):- write("О чём ты говоришь?"),!. randN(2):- write("Что за абракадабра???"),!. randN(3):- write("Сгинь невежество"). randNB(0):- write("мало того что ничего не понятно, так и повторяешься"),!. randNB(1):- write("Да пропади ты к чёрту!!!"),!. randNB(2):- write("Через 7 дней всё закончится..."),!. randNB(3):- write("CAKE IS A LIE!!!!!!!!!!").