UTNianos

Versión completa: Consulta: Prolog, orden superior y predicados generadores
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas, estaba resolviendo el final del 6/8/2011 y en el ejercicio de Prolog, figura este código:


seVende(libro(“Fundación”, asimov)).
seVende(libro(“La Ilíada”, homero)).
seVende(pelicula(“Casablanca”, 1942, “Michael Curtiz”)).
seVende(pelicula(“Jumanji”, 1995, “Joe Johnston”)).

esInteresante(libro( _ , asimov)).
esInteresante(pelicula( _ , Año , _ )):­ Año < 1970.


En uno de los puntos, preguntan si esInteresante/1 es inversible, y respondo que no, porque no tiene un predicado generador a partir del cual obtener todas las soluciones posibles. Mi solución entonces sería agregar esto:


esInteresante(libro(Titulo, asimov)) :- seVende(libro(Titulo, asimov))
esInteresante(pelicula(Titulo, Año, Director)) :- seVende(pelicula(Titulo, Año, Director)), Año < 1970


Mi pregunta es, ¿se puede resolver agregando un solo predicado generador, o sí o sí se necesita un generador para cada tipo de dato que pueda llegar a aceptar esInteresante/1? Gracias!
Está bien la solución... No pienses en hacer algo genérico para ambos, ya que sólo vas a tener un nivel de indirección más. Uno tiene aridad 2 y otro 3, por lo que sí o sí vas a necesitar un 3er parámetro para ligar Director. Bla, está bien =P.
Joya, mi duda venía del enunciado del problema, que dice:

Cita:Indicar si son inversibles o no los predicados anteriores. Justificar. ¿Algún predicado actúa como generador? Indique
cuál es o cual debería ser y dónde se usaría, según corresponda.

Parece como si faltara exactamente un generador, pero si la única forma de resolverlo es con 2 generadores, que así sea jaja. Gracias!
De hecho es un sólo predicado generador (seVende/1), que estás usando con los distintos functores polimórficamente.
No lo había pensado así, es verdad que es el mismo predicado pero con argumentos distintos nada más. Gracias!
URLs de referencia