SWI-Prolog: Сортировка списка

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

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

Помогите написать программу: Сортировка списка. эл-ты с четными индексами по возрастанию, а с нечетными по убыванию. помогите пожалуйста.

Решение задачи: «SWI-Prolog: Сортировка списка»

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
split(intl,intl,intl)
zip(intl,intl,intl)
min(intl,int)
max(intl,int)
delfirst(intl,int,intl)
vsort1(intl,intl)
vsort2(intl,intl)
task(intl,intl)
 
clauses
split([],[],[]).
split([H],[H],[]).
split([H1,H2|T],[H1|Q1],[H2|Q2]) :- split(T,Q1,Q2).
 
zip([],_,[]):- !.
zip(_,[],[]):- !.
zip([H|T],[Z|Q],[H,Z|R]) :- zip(T,Q,R).
 
min([H],H).
min([H|T],H) :- min(T,Q), H<Q.
min([H|T],Q) :- min(T,Q), H>=Q.
 
max([H],H).
max([H|T],H) :- max(T,Q), H>Q.
max([H|T],Q) :- max(T,Q), H<=Q.
 
delfirst([],_,[]).
delfirst([H|T],H,T).
delfirst([Q|T],H,[Q|R]) :- Q <> H, delfirst(T,H,R).
 
vsort1([],[]).
vsort1(X,[H|Y]) :- min(X,H), delfirst(X,H,Z), vsort1(Z,Y).
 
vsort2([],[]).
vsort2(X,[H|Y]) :- max(X,H), delfirst(X,H,Z), vsort2(Z,Y).
 
task(X,R) :- split(X,X1,X2), vsort1(X1,XX1), vsort2(X2,XX2), zip(XX1,XX2,R).

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


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

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

12   голосов , оценка 4.25 из 5