UTNianos

Versión completa: [Ayuda] Ejercicio Prolog Final
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola estaba resolviendo un final y tengo el siguiente ejercicio, me surgieron varias dudas
[Imagen: prolog-1649208.png]
Esto es lo que yo pude responder
1a) No es polimorfica ya que repite código y lógica en los predicados: todosLosMetrosDeCasas y todosLosMetrosDeDepartamentos
1b) No hace falta ligar con la variable metros, ya es inversible por si sólo.
1c) y 2.
No tengo ni idea, no se me ocurre otra manera de hacer el predicado propiedadMasGrande, aclaro que tampoco se puede alterar la base. =/

Muchas gracias.
Aloha

Sobre tus dudas

1c) pensa que existe otra forma de obtener un máximo, acá tiene un par de pasos, juntar todos los elementos + concatenarlos + obtener un máximo. Es bastante imperativa la solución, existe otra basada en el paradigma lógico, que podes decir Tal es mayor que todos.

2) La idea es arreglar todo lo otro que dijiste que estaba mal antes (solo que no te olvides de que sea inversible)

Y sobre las respuestas

1a) mmm, para mi la repetición de código es una consecuencia, pensa que es lo que te soluciona el polimorfismo y ahi no esta presente. Porque así la respuesta es como que queda a medias.

1b) yo pondría que es inversible (porque lo que me interesa generar es la lista), que no necesito generar Metros antes porque si ligo la variable antes el findall solo va a hacer que vaya un único Metros que es el que genero primero y no es lo que quiero.
Para el punto C, tenes que ver que otra forma pueda existir para que se entienda mejor. Recordá la definición de declaratividad y después compará con la solución..

Después, para el resto estoy de acuerdo con dezine18

Saludos!
A mi se me ocurre en el punto 2 usar polimorfismo, orden superior y declaratividad.


obtenerMetros(Metros) :- propiedad(_, _,casa(Metros)).
obtenerMetros(Metros) :- propiedad(_, _,departamento(_, Metros)).

propiedadMasGrande(MetrosFinal) :- obtenerPropiedadMasGrande(MetrosFinal).

obtenerPropiedadMasGrande(MetrosFinal) :- findall(Metros,obtenerMetros(Metros),ListaMetros),
max_member(MetrosFinal,ListaMetros).

Además de usar polimorfismo para arreglarlo, usaría un forall/2 para aumentar la declaratividad, dado que no necesito decirle explicitamente arma una lista y saca el mayor, ya que no me importa como hace el motor el forall/2
URLs de referencia