rendered paste body/* Lab - 6 */domains E = string* T = string I = integer predicates /* Принадлежность */ add_bel(T) belong(T,E) /* Замена */ /* Нихера не работает, сука >.< */ add_chg(T,T) change(T,T,E,E) /* Первый и последний элементы */ first(E) last(E) /* Конкатенация */ add_con(E) concatn(E,E,E) /* Добавление элемента в список */ add_add(T) add(T,E,E) /* Удаление элемента из списка */ add_del(T) del(E,T,E) /* Обращение списка */ reverse(E,E) /* Включение подсписка в список */ add_sub(E) sublist(E,E) /* Длина списка */ length(E,I) add_len(I) /* Номер элемента списка */ add_ind(T) index(T,I,E) /* Просмотр */ viever(E) enter_list(E) menu(E,T) action(E,T) program. goal program. /* santa */clauses program:- write("\nВведите список\n(точка = прерывание)\n---\n"), enter_list(Str), menu(Str,Txt). enter_list([H|T]):- write("Ввод: "), readln(H), H <> "." ,!, enter_list(T). enter_list([]). menu(Str,Txt):- write("1.Просмотр\n2.Принадлежит\n3.Заменить\n"), write("4.Первый\n5.Последний\n6.Конкатенация\n"), write("7.Добавление\n8.Удаление\n9.Реверсия\n"), write("10.Подсписок\n11.Длина списка\n12.Индекс\n"), write("13.Выход\n-----\nВведите значение: "), readln(Txt), action(Str,Txt). action(Str,"1"):- viever(Str), menu(Str,_),!. action(Str,"2"):- add_bel(El), belong(El,Str), readln(P), menu(Str,_),!. action(Str,"3"):- add_chg(X,Y), change(X,Y,L,G), write("\n\nРезультат:\n",G), readln(Pps),menu(G,_),!. action(Str,"4"):- first(Str), readln(P), menu(Str,_),!. action(Str,"5"):- last(Str), readln(P), menu(Str,_),!. action(Str,"6"):- write("\n\nВведите второй список\n"), write("(Точка = стоп)\n"), add_con(Str1), concatn(Str,Str1,[H|T]), List = [H|T], write("\n\nНовый список:\n",List), readln(Ppt), menu(List,_),!. action(Str,"7"):- add_add(S), add(S,Str,Str1), readln(Ppt), menu(Str1,_),!. action(Str,"8"):- add_del(X), del(Str,X,Str1), write("\n\nУдалённый элемент: ",X,"\n\n"), readln(Pps), menu(Str1,_),!. action(Str,"9"):- reverse(Str,Str1), write("\n\nОбращённый список:\n",Str1), readln(Poq), menu(Str1,_),!. action(Str,"10"):- write("\n\nВведите подсписок\n"), add_sub(Str1), sublist(Str1,Str), readln(Vrp), menu(Str,_),!. action(Str,"11"):- length(Str,N), add_len(N), menu(Str,_),!. action(Str,"12"):- add_ind(S), index(S,1,Str), readln(Nns), menu(Str,_),!. /* Просмотр списка */ viever(Str):- write("\n\nСписок:\n"), write(Str), write("\n\n"), readln(N), write("\n\n"). /* Приндлежность элемента списку*/ add_bel(El):- write("\n\nВведите символ: "), readln(El). belong(El,[El|_]):- write("\n\n",El," - Принадлежит списку\n\n"),!. belong(El,[_|T]):- belong(El,T),!. belong(El,[_|[]]):- write("\n\n",El," - Не принадлежит списку\n\n"). /* Замена элемента */ /* Гдеее Эта Долбаная Ошибка?!?!?!?! */ add_chg(X,Y):- write("\n\nВвод заменяемого элемента: "), readln(X), write("\n\nВвод элемента: "), readln(Y). change(X,Y,[X|T],[Y|T1]):-!, change(X,Y,T,T1). change(X,Y,[M|T],[M|T1]):- change(X,Y,T,T1). change(_,_,[],[]). /* Процедура нахождения первого элемента списка */ first([H|T]):- write("\n\nПервый элемент: "), write(H). /* Процедура нахождения последнего элемента */ last([H|[]]):- write("\n\nПоследний элемент: ", H). last([_|T]):- last(T). /* Конкатенация */ add_con([H|T]):- write("Ввод: "), readln(H), H <> "." ,!, add_con(T). add_con([]). concatn([],L,L). concatn([H|L1],Str1,[H|L3]):- concatn(L1,Str1,L3). /* Процедура добавления элемента в список */ add_add(S):- write("\n\nВведите элемент: "), readln(S). add(S,Str,Str1):- Str1 = [S|Str], write("\n\nНовый список:\n",Str1). /* Удаление элемента из списка */ add_del(X):- write("\n\nВведите элемент: "), readln(X). del([X|T],X,L):- del(T,X,L). del([H|T],X,[H|L]):- X<>H, del(T,X,L). del([],_,[]). /* Обращение списка */ reverse([],[]). reverse([H|T],L):- reverse(T,Z), concatn(Z,[H],L). /* Подсписок списка(включения множеств) */ add_sub([H|T]):- write("Ввод: "), readln(H), H <> "." ,!, add_sub(T). add_sub([]). sublist(Str1,Str):- concatn(_,X,Str), concatn(Str1,_,X), write("\n\n",Str1,"\nподсписок списка\n",Str),!. sublist(Str1,Str):- write("\n\n",Str1,"\nНе входит в область\n",Str). /* Длина списка */ length([],0). length([_|T],N):- length(T,TailLength), N=TailLength + 1. add_len(N):- write("\n\nДлина списка: "), write(N), write("\n\n"), readln(P). /* Определение индекса элемента */ add_ind(S):- write("\n\nВведите элемент списка: "), readln(S). index(S,X,[H|T]):- H<>S, Z=X+1, index(S,Z,T). index(S,X,[S|_]):- write("\n\nЭлемент: ",S,"\nИндекс: ",X),!. index(S,_,[]):- write("\n\nЭлемента ",S," в списке нет").