All pastes #2056367 Raw Edit

Someone

public text v1 · immutable
#2056367 ·published 2011-05-10 17:35 UTC
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).