Переупорядочить элементы списка на отрицательные и остальные

      Комментарии к записи Переупорядочить элементы списка на отрицательные и остальные отключены

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

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

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

    Задача на Prolog:

    Переупорядочить элементы списка так, чтобы вначале шли все отрицательные элементы, а затем все неотрицательные элементы

    Решить нужно на Visual Prolog, но наш код будет успешно работать также на SWI Prolog. Если Вам что-либо не понятно в описании — посмотрите статью «введение в логическое программирование«.

    Для решения задачи мы разделим список на отрицательные и остальные с помощью функции divide_negative_other, а затем соединим полученные списки:

      relist(List, SortedList):-
        divide_negative_other(List, Negative, Other),
        append(Negative, Other, SortedList).

    Функция append является стандартной для многих диалектов, но для Visual Prolog ее реализацию нужно скопировать в код из статьи «обработка списков в Prolog».

    Функция divide_negative_other реализована аналогично рассмотренной ранее функции divide_positive_negative_zero с той разницей, что положительные и нулевые элементы помещаются в один и тот же список:

      divide_negative_other([Head|Tail],[Head|NegativeTail],Other):- 
        Head < 0, !, divide_negative_other(Tail,NegativeTail,Other).
      divide_negative_other([Head|Tail],Negative,[Head|TailOther]):-
        divide_negative_other(Tail,Negative,TailOther).
      divide_negative_other([],[],[]).

    Результаты работы программы:
    prolog-relist-negative-and-other

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