Cátedra: Cabrera
Fecha: 1ra Oportunidad - (2do Cuatrimestre) 2008
Día: 29/11/2008
Definir un predicado que ordene una lista.
domains lint = integer*.
predicates nondeterm minimo (lint,integer). nondeterm menor (integer,integer,integer). nondeterm remover (lint,integer,lint). nondeterm ordenar (lint,lint).
clauses menor(X,Y,Z):-X<Y,Z=X,!. menor(_,Y,Y). minimo([Ca|[Ca1|Co]],X):-Ca1<Ca,minimo([Ca|Co],Y),menor(Ca1,Y,X). minimo([Ca|[Ca1|Co]],X):-Ca<=Ca1,minimo([Ca1|Co],Y),menor(Ca,Y,X). minimo([Ca],Ca). remover([Ca],Ca,[]). remover([Ca|Co],Ca,Co). remover([Ca|Co],X,[Ca|L1]):-Ca<>X,remover(Co,X,L1). ordenar([Ca],[Ca]):-!. ordenar([Ca|Co],[X|L2]):-minimo([Ca|Co],X),remover([Ca|Co],X,L1),ordenar(L1,L2).
goal ordenar([2,1,5,3,7],L).