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).