Заменить N последних элементов списка на заданную константу - Prolog
Формулировка задачи:
Заменить N последних элементов списка на заданную константу.
Решение задачи: «Заменить N последних элементов списка на заданную константу»
textual
Листинг программы
domains
list=integer*
predicates
nondeterm append(list,integer,list)
nondeterm run(list)
nondeterm insert (integer,list,list)
nondeterm create_list (list,list)
nondeterm do (char,list,list)
nondeterm length(list,integer)
nondeterm change(list,integer,integer,list)
nondeterm task(list,integer,integer,list)
clauses
run(L):- write("\n 1. Create list \n 2. Change elements \n 3. Exit\n"),
readchar(X),
write("Entered: ", X,"\n"),
do(X,L,NewL),
run(NewL).
do ('1',L,NewL):-create_list(L,NewL),
write("List: ", NewL).
do ('2',L,L):-write("Enter number: "),
readint(N),
write("Enter const: "),
readint(C),
task(L,C,N,NewL),
write("List: ", NewL).
do('3',L,L):-write("Good Buy!"),exit.
do (X,L,L):-X<>'1',X<>'2',X<>'3',write ("Error!").
create_list(L,NewL):-write(">>"),
readint(X),
append(L,X,TempL),
create_list(TempL,NewL).
create_list(L,L).
insert(X,L,[X|L]).
append([],X,[X]).
append([H|Xs],X,[H|Ys]):-
append(Xs,X,Ys).
length([],0).
length([_|T],Len):-length(T,Count),
Len=Count+1.
change([],_,_,[]).
change([H|T],C,N,[H|NewT]) :- N>0, N1=N-1, change(T,C,N1,NewT).
change([_|T],C,0,[C|NewT]) :- change(T,C,0,NewT).
task(X,C,N,NewT) :-length(X,Len),
N1=Len-N,
%N>Len, do('2',L,L),
change(X,C,N1,NewT).
goal
run([]).