UTNianos

Versión completa: [Aporte] Final Paradigmas De Programación (19/02/2011)
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola gente!
Si bien es sabido que en el grupo seguramente lo estén subiendo en estos días, recién se lo escanié a alguien que lo está preparando y pensé que quizás alguno mas lo quiera ir viendo, así que aquí se los dejo.

Saludos!

[attachment=851][attachment=852]
muchas gracias !!!!
Alguien logró resolver los ejercicios 2 y 3 del Punto Uno (el de Prolog)?
(24-02-2011 10:15)floader escribió: [ -> ]Alguien logró resolver los ejercicios 2 y 3 del Punto Uno (el de Prolog)?

estoy con la misma duda!! si alguien puede ayudar seria de gran utilidad
(24-02-2011 10:15)floader escribió: [ -> ]Alguien logró resolver los ejercicios 2 y 3 del Punto Uno (el de Prolog)?

Yo aprobe ese final, tenes que hacer esto:

2) No son polimorficos:

mueble( mesa, cedro, 10 (representa el volumen) ).
mueble( banquito, pino (no importa para el calculo, pero hay q ponerlo), 20 (representa el costoMateriales) ).

Y el predicado polimorfico seria asi:

costoProduccion( mueble( mesa, Madera, Volumen), Costo ):- costoProduccionMesa( Madera, Volumen, Costo ).

costoProduccion( mueble( banquito, _, CostoMateriales), Costo ):- costoProduccionBanqueta( CostoMateriales, Costo ) .

Eso te ayuda para el punto 3:

Lote[ mueble( mesa, cedro, 10 ), mueble( banquito, pino, 20 )].

costoLote( [ mueble( Tipo, Madera, Numero ) | Ls ], Costo ):- costoProduccion( mueble( Tipo, Madera, Numero ), Costo1 ), costoLote( Ls, Costo2 ), Costo is Costo1 + Costo2.

Espero que te sirva, cualquier cosa preguntame!

Saludos!
Sí, eso lo había hecho. El tema es que la solución, sin ofender, no me gusta mucho. Le fata... cómo decirlo, un polimorfismo más ortodoxo como para usar functor? Bah, yo me rompí la cabeza intentando hacerlo con un functor... pero bueno, después de ver esto creo que me convenzo que con functores no se puede.
Muchas gracias por la mano!
(24-02-2011 15:54)floader escribió: [ -> ]Sí, eso lo había hecho. El tema es que la solución, sin ofender, no me gusta mucho. Le fata... cómo decirlo, un polimorfismo más ortodoxo como para usar functor? Bah, yo me rompí la cabeza intentando hacerlo con un functor... pero bueno, después de ver esto creo que me convenzo que con functores no se puede.
Muchas gracias por la mano!

A que te referis con que use functor?
(24-02-2011 15:43)Axelito escribió: [ -> ]
(24-02-2011 10:15)floader escribió: [ -> ]Alguien logró resolver los ejercicios 2 y 3 del Punto Uno (el de Prolog)?

Espero que te sirva, cualquier cosa preguntame!

Saludos!

Es de mucha ayuda tu solucion.. No iba por tan mal camino, pero me despejaste algunas dudas..

gracias!!
(24-02-2011 16:05)Axelito escribió: [ -> ]
(24-02-2011 15:54)floader escribió: [ -> ]Sí, eso lo había hecho. El tema es que la solución, sin ofender, no me gusta mucho. Le fata... cómo decirlo, un polimorfismo más ortodoxo como para usar functor? Bah, yo me rompí la cabeza intentando hacerlo con un functor... pero bueno, después de ver esto creo que me convenzo que con functores no se puede.
Muchas gracias por la mano!

A que te referis con que use functor?

Ahh ahora que veo bien tu solución usas un functor en realidad.
Vos modelas el mueble con este functor mueble(Tipo,Madera,Volumen), y yo intentaba modelar a cada mueble con estos functores mesa(Madera,Volumen) y banqueta(CostoMateriales).
Con esto, se puede definir:
costoProduccion(mesa(Madera,Volumen),Costo):- costoProduccionMesa(Madera,Volumen,Costo).
costoProduccion(banqueta(CostoMateriales),Costo):- costoProduccionBanqueta(CostoMateriales,Costo).


Hasta ahí estamos bien, tu solución y mi solución funcionan. Lo que no sé cómo resolver es el punto tres. Puse en Prolog tu solución del punto 3 y me devuelve todo el tiempo false. Igual estoy en el tabajo, así que no me puedo concentrar mucho y estoy haciendo todo a las apuradas, quizás me pasé por alto algo de tu solución que no lo está haciendo funcionar. Cuando este más tranquilo esta noche le pego una mirada más profunda.
Gracias igual por la mano!
Fijate que a la solucion que da Axelito del punto 3 le falta el caso base para que corte la recursividad, que seria:

costoLote ( [], 0 ).


espero te sirva.. saludos.
axelito puso la posta, yo rendi ese final, de pedo lo saque, siempre que te digan lo de polimorfismo en logico, es con functores, otra no qeda, porque en realidad prolog es debilmente tipado, osea no chequea tipos, pero por ejemplo cuando pregunto, quienes son los alumnos que cursaron x materia..... cuando hago la consulta puedo poner si quiero curso(pdp,mesa)... y prolog no dice nada, .... pero estaria bueno, que solo, se consulten por PERSONAS, ...eso se loga con functores, o tmb predicados generadores.

estuve la primer hora para hacer esos 2 puntos...
dps lo demas era bastante facil
@floader:

Tu solucion no puede resolver el punto tres porque los elementos de una lista (el lote) tienen que ser todos del mismo tipo de dato >.<.
Y, como me corrijeron, me olvide el caso base xD.

(25-02-2011 16:04)suru88 escribió: [ -> ]estuve la primer hora para hacer esos 2 puntos...
dps lo demas era bastante facil

Yo tmb colgue un rato en eso xD.
Vengo a desempatar, lo hice hace algunos dias este final. La solucion que hice y que me parece correcta es la de floader.

Axelito, vos estas usando el mismo functor "mueble" para representar mesas y banquitos, por mas que funcione creo que esta mal conceptualmente.



costoMadera(cedro, 10, 2).
costoMadera(brasil, 12, 2).
costoMadera(pino, 8, 6).


costoProduccion(mesa(Madera, Volumen), Costo) :-
costoMadera(Madera, CostoCompraMadera, CostoTrabajoMadera),
Costo is (Volumen * CostoCompraMadera) + CostoTrabajoMadera.

costoProduccion(banqueta(CostoMateriales), Costo) :-
Costo is CostoMateriales + 10.



Hasta ahi es lo mismo que hizo floader, yo saque los intermediarios nada mas.


Y el predicado recursivo seria sencillamente este:


costoLote([],0).
costoLote([X|Xs],CostoTotal):-costoProduccion(X,Costo), costoLote(Xs,Costo2), CostoTotal is Costo + Costo2.





(25-02-2011 19:44)Axelito escribió: [ -> ]@floader:
Tu solucion no puede resolver el punto tres porque los elementos de una lista (el lote) tienen que ser todos del mismo tipo de dato >.<.
Y, como me corrijeron, me olvide el caso base xD.

Precisamente lo copado de logico es podes laburar con listas mixtas, de distintos tipos de datos, me extraña que digas eso.
En este caso sirve para tener tanto mesas como banquitos en una lista, y al procesarlos en "costoProduccion" el motor va a matchear con el predicado que le corresponde y va a calcular bien el costo.

Saludos
Hola, alguien que me de una mano con el Punto 1 item 4?

La interfaz de los objetos tipos de madera es costoTrabajo y costoCompra.

Mi duda esta en donde meto unLoteDeMuebles costoTotal. ? En que clase lo codifico?

Despues como resolverlo lo haria asi:

^ loteMuebles inject 0 into :[costoTotal :unMueble | unMueble costoProduccion + costoTotal ]

Habria lo siguiente :

#Mesa >> costoProduccion.
-
-
-

#Banqueta >> costoProduccion.

Mi duda repito es, donde, en que clase, lo codifico?

Saludos!
URLs de referencia