Перемешать два списка на Prolog

      Комментарии к записи Перемешать два списка на Prolog отключены

Помечено: , , ,

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

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

    Нужно перемещать элементы двух списков на Visual Prolog, т.е.:

    Даны два списка имеющие в общем виде разное количество элементов, сформировать результирующий список, где на нечётных местах, элементы первого списка в исходной последовательности, на чётных второго. Если элементы одного списка закончились — возвращается пустой список.

    domains
      	element = integer
      	list = element*
    predicates
        	nondeterm mix(list, list, list)
    clauses
           	mix([], [], []):-!.
           	mix([], _B, []):-!.
           	mix(_A, [], []):-!.
           	mix([AHead|ATail], [BHead|BTail], [AHead,BHead|Tail]):-
           		mix(ATail, BTail, Tail).
    goal
        mix([1,2,3], [4,5,6], X).

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

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