Применить сортировку вставкой к тем элементам списка списков, длина которых превышает 3 - Prolog
Формулировка задачи:
Здравствуйте, не могу осилить задачу на Prolog 7.5:Применить сортировку вставкой к тем элементам списка списков, длина которых превышает 3. Помогите пожалуйста
Решение задачи: «Применить сортировку вставкой к тем элементам списка списков, длина которых превышает 3»
textual
Листинг программы
domains int=integer intl=int* intll=intl* predicates len(intl,int) ins(int,intl,intl) isort(intl,intl,intl) task(intll,intll) clauses len([],0). len([_|T],N) :- len(T,N1), N=N1+1. ins(X,[],[X]). ins(X,[H|T],[X,H|T]) :- X<=H. ins(X,[H|T],[H|R]) :- X>H, ins(X,T,R). isort([],A,A). isort([H|T],A,R) :- ins(H,A,B), isort(T,B,R). task([],[]). task([H|T],[H|R]) :- len(H,L), L < 3, task(T,R). task([H|T],[S|R]) :- len(H,L), L >= 3, isort(H,[],S), task(T,R).
Объяснение кода листинга программы
- В коде используется язык программирования Prolog.
- Код решает задачу сортировки вставкой для списков с длиной более 3 элементов.
- Для этого в коде определены следующие сущности:
- int - целочисленный тип данных.
- intl - список целочисленных значений.
- intll - список списков целочисленных значений.
- len - предикат для определения длины списка.
- ins - предикат для вставки элемента в список.
- isort - предикат для сортировки списка вставкой.
- task - предикат для выполнения задачи (сортировки списков с длиной более 3 элементов).
- В коде определены следующие правила:
- len([],0). - длина пустого списка равна 0.
- len([_|T],N) :- len(T,N1), N=N1+1. - длина списка равна сумме длин его подсписков плюс 1.
- ins(X,[],[X]). - элемент X вставляется в пустой список.
- ins(X,[H|T],[X,H|T]) :- X<=H. - элемент X вставляется перед элементом H в списке T.
- ins(X,[H|T],[H|R]) :- X>H, ins(X,T,R). - элемент X вставляется после элемента H в списке T.
- isort([],A,A). - пустой список считается уже отсортированным.
- isort([H|T],A,R) :- ins(H,A,B), isort(T,B,R). - список T сортируется вставкой элемента H из списка A.
- task([],[]). - пустой список считается задачей со сроком выполнения 0.
- task([H|T],[H|R]) :- len(H,L), L < 3, task(T,R). - список T является задачей, если длина его первого элемента меньше 3, и он передается дальше.
- task([H|T],[S|R]) :- len(H,L), L >= 3, isort(H,[],S), task(T,R). - список T является задачей, если длина его первого элемента больше или равна 3, и он сортируется вставкой, после чего передается дальше.