Вставка элемента на заданную позицию в список, TurboProlog
Формулировка задачи:
Здравствуйте, помогите пожалуйста,нужно вставить элемент на заданную позицию в список, вот мой код:
Листинг программы
- domains
- list=integer*
- predicates
- main(list,integer,integer,list)
- cons(list,list,list)
- ins(integer,list,integer,integer,list)
- clauses
- cons([],L,L).
- cons([H|T],L,[H|Z]):-cons(T,L,Z).
- ins(N1,[H|T],N,A,[H|LST]):-N1<>N,ins(N1,T,N,A,LST).
- ins(N1,[H|T],N,A,[A|LST]):-N1=N1+1,!,ins(N1,T,N,A,LST).
- ins(_,[],_,_,[]).
- main(X,N,A,LST):-ins(0,X,N,A,LST).
Решение задачи: «Вставка элемента на заданную позицию в список, TurboProlog»
textual
Листинг программы
- domains
- int=integer
- intl=int*
- predicates
- ins_in_pos(intl,int,int,intl)
- clauses
- ins_in_pos(L,V,0,[V|L]).
- ins_in_pos([H|T],V,N,[H|R]) :- N1=N-1, ins_in_pos(T,V,N1,R).
Объяснение кода листинга программы
Код выполняет вставку элемента в список на заданную позицию. Список представлен как intl (int list), элемент для вставки — V, позиция для вставки — N. В коде определены два предиката:
- ins_in_pos(intl,int,int,intl) — выполняет вставку элемента в список на заданную позицию
- clauses — определяет правила для работы с предикатом ins_in_pos В первом правиле (инструкции) для списка, содержащего один элемент (L = [H|T]), элемент V вставляется на позицию N в список L, и результатом является новый список [V|L]. Во втором правиле (инструкции) для списка, содержащего более одного элемента (L = [H|T]), элемент V вставляется на позицию N в список T, и результатом является новый список [H|R]. Здесь N1 = N — 1, поскольку позиция для вставки в списке T будет на единицу меньше, чем в исходном списке L.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д