Сортировка пузырьком списка списков - 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).
Объяснение кода листинга программы
В коде используется сортировка пузырьком для списка списков. Вот список элементов кода с их номерами:
- domains: определяются три типа данных - listI, listL и listD.
- predicates: определяются три предиката - permutation, bubble и sort.
- clauses: задаются три правила для предиката permutation и одно правило для предиката bubble.
- goal: задается цель сортировки списка списков. Вот как работает код:
- Функция permutation используется для перестановки элементов в списке. Она изменяет порядок элементов, если текущий элемент больше следующего. Если элементы уже находятся в правильном порядке, функция заканчивает свою работу.
- Функция bubble вызывает функцию permutation и рекурсивно вызывает саму себя, пока список не будет отсортирован. Если список уже отсортирован, функция просто завершает свою работу.
- Функция 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]].
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д