Реализовать разделение списка на два - Prolog

Узнай цену своей работы

Формулировка задачи:

Определите отношение divideList(+List, –List1, –List2) таким образом, чтобы элементы списка List попеременно распределялись между списками List1 и List2, причем List1 и List2 имели примерно одинаковую длину, например divideList([a,b,c,d,e],[a,c,e],[b,d]) – истина.

Решение задачи: «Реализовать разделение списка на два»

textual
Листинг программы
  1. domains
  2. sym=symbol
  3. syml=sym*
  4.  
  5. predicates
  6. zip(syml,syml,syml)      %% объединение
  7. divlist(syml,syml,syml)  %% разделение
  8.  
  9. clauses
  10. zip(S,S,[]).
  11. zip(S,[],S).
  12. zip([A,B|R],[A|T],[B|Q]) :- zip(R,T,Q).
  13.  
  14. divlist([],[],[]).
  15. divlist([A],[A],[]).
  16. divlist([A,B|R],[A|T],[B|Q]) :- divlist(R,T,Q).
  17.  
  18.  
  19. goal
  20. divlist([a,b,c,d,e,f],A,B),write(A),nl,write(B),nl.

Объяснение кода листинга программы

  1. Написана структура программы на языке Prolog: domains sym=symbol syml=sym* predicates zip(syml,syml,syml) % объединение divlist(syml,syml,syml) % разделение clauses zip(S,S,[]). zip(S,[],S). zip([A,B|R],[A|T],[B|Q]) :- zip(R,T,Q). divlist([],[],[]). divlist([A],[A],[]). divlist([A,B|R],[A|T],[B|Q]) :- divlist(R,T,Q).
  2. Задана цель: goal divlist([a,b,c,d,e,f],A,B),write(A),nl,write(B),nl.
  3. В коде определены две функции: — Функция zip() выполняет объединение трех списков. — Функция divlist() выполняет разделение одного списка на два.
  4. В функции divlist() реализован рекурсивный алгоритм разделения списка на два. В основе алгоритма лежит принцип разделения пополам: — Если список пустой или состоит из одного элемента, то он разделяется на пустой список и список с элементом. — Если список состоит из двух и более элементов, то рекурсивно вызывается функция divlist() для списка, уменьшенного на один элемент, и двух списков, полученных на предыдущем шаге.
  5. В цели задано вызов функции divlist() с шестью аргументами: — [a,b,c,d,e,f] — список, который нужно разделить на два. — A — первый результат разделения. — B — второй результат разделения.
  6. После вызова функции divlist() происходит вывод результатов на экран с помощью функции write().
  7. В результате выполнения программы на экран будет выведен список A и список B, которые являются результатами разделения исходного списка [a,b,c,d,e,f] на два.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы