sistemas resueltos reglas primer orden logica listas formularios explicados expertos ejercicios concatenar clausulas prolog set max

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.