sort (SLIST,SLIST) %предикат быстрой сортировки
• 1-й аргумент - список строк, который требуется отсортировать;
• 2-й аргумент - отсортированный список строк (результат).
Данное правило использует восходящую рекурсию для сортировки списка(1-й аргумент)
и перемещения отсортированного списка в результирующий список(2-й аргумент).
div2(STRING,SLIST,SLIST,SLIST)%предикат разбиения списка
• 1-й аргумент - голова списка X;
• 2-й аргумент - хвост;
• 3-й аргумент - список элементов меньше Х;
• 4-й аргумент - список элементов больше Х.
link(SLIST,SLIST,SLIST) %предикат конкатенации списков
• 1-й аргумент - 1 список;
• 2-й аргумент - 2 список;
• 3-й аргумент - результат конкатенации списков 1 и 2.
Код на Lisp PREDICATES sort(SLIST,SLIST) div2(STRING,SLIST,SLIST,SLIST) link(SLIST,SLIST,SLIST) CLAUSES /*сортировка списка(Быстрая сортировка)*/ div2(_,[],[],[]). div2(X,[Y|TAIL], [Y|S],L):-X>Y,!,div2(X,TAIL,S,L). div2(X,[Y|TAIL], S,[Y|L]):-div2(X,TAIL,S,L). link([],L,L). link([X|L1],L2,[X|L3]):-link(L1,L2,L3). sort([],[]). sort([X|TAIL],SORTLIST) :-div2(X, TAIL, S, L), sort(S, SORTS), sort(L, SORTL), link(SORTS,[X|SORTL],SORTLIST).
|