Cátedra: Cabrera
Fecha: Primera Oportunidad - Segundo Cuatrimestre 2006
Día: 17/11/2006
domains lista = integer* predicates nondeterm anteriores(integer,lista) nondeterm ady(integer,integer,lista) nondeterm minLista(lista,integer) %Auxiliar para encontrar el mínimo entre dos números nondeterm elMenor(integer,integer,integer) clauses %Si el número es cero, no tiene anteriores anteriores(0,[]):-!. %Si no, se agrega el número como cabeza, y se genera una cola con sus anteriores anteriores(X,[H|T]) :- H = X, X1 = X-1,anteriores(X1,T). %El mínimo de una lista de un elemento es él mismo minLista([X],X). %O es el mínimo entre la cabeza y el mínimo de la cola minLista([H|T],Min):-minLista(T,R), elMenor(H,R,Min). %El mínimo entre dos es uno elMenor(X,Y,X):- X<Y,!. %O el otro elMenor(_,Y,Y). %Dos números son adyacentes en una lista si son el primero y el segundo ady(X,Y,[X,Y|_]). %O saco la cabeza, y compruebo la cola ady(X,Y,[_|T]):- ady(X,Y,T).