Вставить в список элементы другого списка после каждого вхождения 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).
Объяснение кода листинга программы
Код решает задачу вставки элементов из одного списка в другой после каждого вхождения определенного элемента. В коде присутствуют два основных правила:
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].
- Здесь происходит рекурсивный вызов функции
append1([],L,L).- Если первый аргумент пуст, то возвращается пустой список.
append1([H|T],L,[H|R]):- append1(T,L,R).- Если первый аргумент не пуст, то его голова
[H|T]добавляется в начало спискаLи вызывается рекурсивный вызов функцииappend1с аргументамиT,LиR. ЗначениеRбудет новым хвостом объединенного списка. Таким образом, код рекурсивно проходит по всем элементам первого списка, вставляя после каждого вхождения элементаXэлементы из второго списка. Затем, используя функциюappend1, объединенные списки конкатенируются в один список.
- Если первый аргумент не пуст, то его голова