Применить сортировку вставкой к тем элементам списка списков, длина которых превышает 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).

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

  1. В коде используется язык программирования Prolog.
  2. Код решает задачу сортировки вставкой для списков с длиной более 3 элементов.
  3. Для этого в коде определены следующие сущности:
    • int - целочисленный тип данных.
    • intl - список целочисленных значений.
    • intll - список списков целочисленных значений.
    • len - предикат для определения длины списка.
    • ins - предикат для вставки элемента в список.
    • isort - предикат для сортировки списка вставкой.
    • task - предикат для выполнения задачи (сортировки списков с длиной более 3 элементов).
  4. В коде определены следующие правила:
    • 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, и он сортируется вставкой, после чего передается дальше.

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

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