Разделение списка на элементы большие заданного значения и меньшие

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

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

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

    questioner
    Участник

    Помогите написать функцию, которая будет разделять исходный список на 2 части. В первую должны войти элементы, большие заданного значения, а во вторую – остальные.

    Например:

    divide([0,1,2,3,4,5], 2, Less, Bigger).
    Less = [0, 1]
    Bigger = [2,3,4,5]

  • #2078

    Если исходный список пуст – то результатом работы функции являются два пустых списка.
    В противном случае, первый элемент сравнивается с опорным (относительно которого выполняется разделение), в зависимости от результата сравнения он добавляется к какому-либо списку-результату. В любом случае выполняется рекурсивный вызов, рассчитывающий остальные элементы результата.

    divide([], _Pivot, [], []):-!.
    divide([Head|Tail], Pivot, [Head|GreaterList], SmallerList):-
      Head >= Pivot, !, divide(Tail, Pivot, GreaterList, SmallerList).
    divide([Head|Tail], Pivot, GreaterList, [Head|SmallerList]):-
      divide(Tail, Pivot, GreaterList, SmallerList).

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