Вставить список, начиная с N-ой позиции

      Комментарии к записи Вставить список, начиная с N-ой позиции отключены

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 мес., 2 нед. назад.

  • Автор
    Сообщения
  • #3311

    Решим на языке Prolog задачу:

    Вставить в первый список другой список, начиная с N-ой позиции.

    domains 
    	list = integer*
    predicates
      	insert_sublist(list, integer, list, list)  
    clauses	
           	insert_sublist(A, 0, B, Result):-
           		append(B, A, Result), !.
           	insert_sublist([Head|Tail], Pos, B, [Head|TailResult]):-
           		NextPos = Pos - 1,
           		insert_sublist(Tail, NextPos, B, TailResult). 
      		
    goal
      	insert_sublist([1,2,3,4,5], 2, [0,0,0], X).

    Тут для соединения списков используется предикат append.

    insert_sublist

    Чтобы вставить подсписок мы должны перейти на указанную позицию первого списка, добавить в его начало второй список, а затем вернуть элементы, которые были «взяты» из начала во время перехода на позицию.

    Вставка подсписка при нулевой позиции производится с помощью append (он позволяет соединить два списка). Если же позиция не равна нулю — от списка отделяется первый элемент, а остальные обрабатываются рекурсивно с уменьшенной на единицу позицией. К полученному в результате вызова функции результату дописывается первый элемент.

Для ответа в этой теме необходимо авторизоваться.