resueltos - Prolog: obtener un valor máximo de conjunto de una lista de hechos(utilizando el predicado de error)
prolog pdf (1)
Básicamente tengo una lista de hechos como este:
set(x,2).
set(x,7).
set(x,10).
set(x,4).
Necesito encontrar el elemento máximo de este conjunto.
Entrada: maximum(x, MaxElement)
Salida: MaxElement = 10.
Ahora la idea en sí misma no es complicada y vi muchos ejemplos en línea. El problema es que necesito usar el predicado de falla .
Aquí estaba mi idea (que no funciona):
maximum(Set, Element1):-
set(Set,Element1),
set(Set,Element2),
Element2 > Element1,
fail.
maximum(Set, Element) :- set(Set, Element).
La idea aquí fue que la primera regla busca cada elemento que tiene un elemento más grande en el conjunto. Si hay un elemento más grande fallamos y paramos.
Entonces, idealmente para el más grande (10), no fallaríamos y pasaríamos a la siguiente regla que solo ve que está en el conjunto y devuelve verdadero.
Pero así sigue la segunda regla con cada número. También el uso de corte no parece funcionar.
Alguna idea chicos?
Simplemente podría usar forall/2
predicate para examinar cada elemento como:
maximum(Set, Element1):-
set(Set,Element1),
forall(set(Set,Y),(Y>Element1->fail;true)).
Ahora preguntando:
?- maximum(x,X).
X = 10 ;
false.