Объединить списки — элементы четных позиций

      Комментарии к записи Объединить списки — элементы четных позиций отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на списки Объединить списки — элементы четных позиций

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

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

    Решим задачу на Visual Prolog:

    Объединить два списка одинаковой длины в третий так, чтобы вначале списка были элементы с четных позиций первого списка, а в конце с четных — из второго.

    domains 
      list = integer*
    predicates
      odd_append(list, list, list)  
      odd_pos_elements(list, list)	
    clauses
      odd_pos_elements([], []):-!.
      odd_pos_elements([_], []):-!.
      odd_pos_elements([_A, B|Tail], [B|OddTail]):-
        odd_pos_elements(Tail, OddTail).
           		
      odd_append(A, B, Appended):-
        odd_pos_elements(A, AOdd),
        odd_pos_elements(B, BOdd),
        append(AOdd, BOdd, Appended).
      		
    goal
      odd_append([1,2,3,4,5], [6,7,8,9,0], X).

    odd_append

    Функция odd_pos_elements создает список из элементов исходного списка, расположенных на позициях с четными номерами. Если в списке меньше двух элементов, то в нем нет таких элементов — возвращается пустой список. Иначе отделяется два первых элемента списка, первый элемент не используется, а второй запоминается. Остальные элементы обрабатываются рекурсивно, а затем, к полученному результату дописывается сохраненное значение второго элемента.

    Функция odd_append выделяет элементы на четных позициях с обоих исходных списков, а затем соединяет полученные результаты с помощью стандартного предиката append (если он отсутствует в вашей версии пролога — возьмите реализацию по ссылке).

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