Как отсортировать список по модулю на Prolog?

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

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

не могу разобраться в Prolog

Решение задачи: «Как отсортировать список по модулю на Prolog?»

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
 
app(intl,intl,intl)  %% склеивание списков
split(intl,int,intl,intl) %% расщепить список на два списка - меньших и не меньших заданного числа
sort(intl,intl) %% быстрая сортировка
 
clauses
 
app([],X,X). %% присоединение к пустому списку дает исходный
app([H|T],X,[H|R]) :- app(T,X,R). %% объединение есть голова первого, присоединенная к объединению
                                              %% хвоста первого и второго
 
split([],_,[],[]). %% расщепление пустого дает пустой
split([H|X],D,[H|L],R) :- abs(H)<= abs(D), split(X,D,L,R). %% если модуль головы меньше модуля разделяющего эл-та,
                                                                             %% то голова идет в первый список
split([H|X],D,L,[H|R]) :- abs(H) > abs(D), split(X,D,L,R).  %% иначе - во второй
 
sort([],[]). %% сортировка пустого дает пустой
               %% непустой список расщепляем по голове, сортируем меньшие, большие и все объединяем                   
sort([H|T],Q) :- split(T,H,L,R), sort(L,SL), sort(R,SR), app(SL,[H],Q1), app(Q1,SR,Q).

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


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

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

7   голосов , оценка 4.143 из 5