Заменить 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([]).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.545 из 5
Похожие ответы