rendered paste body/* Lab - 6 */domains E = string* T = string I = integer predicates add_bel(T) % вспомогательная процедура (готово) belong(T,E) % принадлеждность (готово) change(E) % заменить first(E) % первый (готово) last(E,I) % последний concatn(E) % конкатенация add(E) % добавить add_del(T) % вспомогательная процедура (готово) del(E,T,E) % удалить reverse(E) % реверсия sublist(E) % подсписок length(E,I) % длина списка (готово) add_len(I) % вспомогательная процедура (готово) index(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"):- change(Str), menu(Str,_),!. action(Str,"4"):- first(Str), menu(Str,_),!. action(Str,"5"):- last(Str,N), menu(Str,_),!. action(Str,"6"):- concatn(Str), menu(Str,_),!. action(Str,"7"):- add(Str), menu(Str,_),!. 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), menu(Str,_),!. action(Str,"10"):- sublist(Str), menu(Str,_),!. action(Str,"11"):- length(Str,N), add_len(N), menu(Str,_),!. action(Str,"12"):- index(Str), menu(Str,_),!. viever(Str):- write("\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"). /* косяк, рекурсивно выводит значения */ change(Str). first([H|T]):- write("\n\n"), write(H), write("\n\n"), readln(P). last([_|T],N). /*write("\n\n"), last(T,TailLength), N=TailLength + 1.*/ concatn(Str). add([H1|T1]). /*write("Ввод: "), readln(H1), H1 <> "." ,!, add(T1).*/ add_del(X):- write("\n\nВведите элемент: "), readln(X). del([X|T],X,L). reverse(Str). sublist(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). index(Str).