Как отсортировать список по модулю на 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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д