Быстрая сортировка списков на Прологе


Добавил:DMT
Дата создания:8 января 2008, 23:32
Дата обновления:8 января 2008, 23:34
Просмотров:7181 последний 8 апреля, 4:02
Комментариев: 0
    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
  1. PREDICATES
  2.  
  3. sort(SLIST,SLIST)
  4. div2(STRING,SLIST,SLIST,SLIST)
  5. link(SLIST,SLIST,SLIST)
  6. CLAUSES
  7. /*сортировка списка(Быстрая сортировка)*/
  8. div2(_,[],[],[]).
  9. div2(X,[Y|TAIL], [Y|S],L):-X>Y,!,div2(X,TAIL,S,L).
  10. div2(X,[Y|TAIL], S,[Y|L]):-div2(X,TAIL,S,L).
  11. link([],L,L).
  12. link([X|L1],L2,[X|L3]):-link(L1,L2,L3).
  13. sort([],[]).
  14. sort([X|TAIL],SORTLIST) :-div2(X, TAIL, S, L),
  15. sort(S, SORTS),
  16. sort(L, SORTL),
  17. link(SORTS,[X|SORTL],SORTLIST).
При использовании обязательна ссылка на http://DMTSoft.ru
up