Сортировка пузырьком списка списков - Prolog

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

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

Добрый день! Помогите, пожалуйста, с кодом. Задача звучит так: "Применить сортировку пузырьком к тем элементам списка списков атомов, если их первый элемент больше заданного числа n" Например, есть такой список списков: [[2,3,5,6],[3,9,0,12,2],[4,0,0,1]]. Пусть n=2. Тогда получим [[2,3,5,6],[0,2,3,9,12],[0,0,1,4]] Набросал такой код. Но не уверен в его правильности, а также необходимо как-то обработать ситуацию, когда первый элемент не больше числа n.

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

textual
Листинг программы
domains 
listI = INTEGER 
listL = listI* 
listD = listL* 
 
predicates 
nondeterm permutation(listL,listL) 
nondeterm bubble(listL,listL) 
nondeterm sort (listD, INTEGER, listD) 
 
clauses 
permutation([X,Y|T],[Y,X|T]):- X>Y,!. 
permutation([X|T],[X|T1]):- permutation(T,T1). 
 
bubble(L,L1):- permutation(L,LL),!,bubble(LL,L1). 
bubble(L,L). 
 
sort ([],_,[]). 
sort ([[H1|T1]|T],N,[L|R]) :- H1>N, bubble ([H1|T1], L), sort (T,N,R), !. 
sort ([[H1|T1]|T],N,[L|R]) :- H1<=N, !, sort (T,N,R). % вот здесь надо как-то по другому иначе выводит пустое значение
 
goal 
sort ([[3,2,4],[5,4],[1,2,1,0],[7,3,2],[3,0,0]],1, F).

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

В коде используется сортировка пузырьком для списка списков. Вот список элементов кода с их номерами:

  1. domains: определяются три типа данных - listI, listL и listD.
  2. predicates: определяются три предиката - permutation, bubble и sort.
  3. clauses: задаются три правила для предиката permutation и одно правило для предиката bubble.
  4. goal: задается цель сортировки списка списков. Вот как работает код:
  5. Функция permutation используется для перестановки элементов в списке. Она изменяет порядок элементов, если текущий элемент больше следующего. Если элементы уже находятся в правильном порядке, функция заканчивает свою работу.
  6. Функция bubble вызывает функцию permutation и рекурсивно вызывает саму себя, пока список не будет отсортирован. Если список уже отсортирован, функция просто завершает свою работу.
  7. Функция sort используется для сортировки списка списков. Она разбивает список на два подсписка - один с элементами, большими или равными N, и другой с элементами, меньшими N. Затем она рекурсивно вызывает саму себя для подсписка с элементами, меньшими N, пока весь список не будет отсортирован. В данном случае, код пытается отсортировать список списков [[3,2,4],[5,4],[1,2,1,0],[7,3,2],[3,0,0]] в порядке возрастания первого элемента каждого подсписка. Отсортированный список должен быть [[1,2,1,0],[3,0,0],[3,2,4],[5,4],[7,3,2]].

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


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

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

10   голосов , оценка 3.8 из 5
Похожие ответы