Вставить в список элементы другого списка после каждого вхождения X, если X входит в исходный список - Prolog

Узнай цену своей работы

Формулировка задачи:

Само задание(: Вставьте в список элементы другого списка после каждого вхождения X, если X входит в исходный список. Например: [1,2,1,5,3],X=1,[0,7,9] - >[1,0,7,9,2,1,0,7,9,5,3]. честно говоря есть пример,но тут число вставляется, а как переделать чтобы был список?

Решение задачи: «Вставить в список элементы другого списка после каждого вхождения X, если X входит в исходный список»

textual
Листинг программы
insert1(_,_,[],[]):-!.
insert1(X,Head,[Head|Z],N):- !, insert1(X,Head,Z,T), append1([Head|X],T,N).
insert1(X,Y,[Head|Z],[Head|N]):- insert1(X,Y,Z,N).
append1([],L,L).
append1([H|T],L,[H|R]):-
    append1(T,L,R).

Объяснение кода листинга программы

Код решает задачу вставки элементов из одного списка в другой после каждого вхождения определенного элемента. В коде присутствуют два основных правила:

  1. insert1(X,Head,[Head|Z],N):- !, insert1(X,Head,Z,T), append1([Head|X],T,N).
    • Здесь происходит рекурсивный вызов функции insert1 с аргументами X, Head, Z, T. Значение T передается в качестве нового хвоста списка Z. Затем вызывается функция append1 с аргументами [Head|X], T и N. Значение N передается в качестве нового хвоста списка, который будет соединен с головой [Head|X].
  2. append1([],L,L).
    • Если первый аргумент пуст, то возвращается пустой список.
  3. append1([H|T],L,[H|R]):- append1(T,L,R).
    • Если первый аргумент не пуст, то его голова [H|T] добавляется в начало списка L и вызывается рекурсивный вызов функции append1 с аргументами T, L и R. Значение R будет новым хвостом объединенного списка. Таким образом, код рекурсивно проходит по всем элементам первого списка, вставляя после каждого вхождения элемента X элементы из второго списка. Затем, используя функцию append1, объединенные списки конкатенируются в один список.

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

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