UTNianos

Versión completa: [Aporte][Paradigmas][Spigariol] Final Septiembre 2015
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Chicos, como estan? Acá les dejo el final que me tomaron el 25/09/2015 en la FRD. La cátedra es de Lucas Spigariol.
Acá les dejo más o menos lo que me acuerdo de la resolución del final. El punto 3 no lo subo porque recuerdo que tenía varias cosas corregidas y no tengo intención de marearlos.

Ejericio 1:

-Herencia: Crear clases Hombre y Mujer, y que ambos hereden de Alumno los atributos nota, vestimenta y cartera. Eliminamos el atributo sexo porque ya tenes las dos clases diferenciadas. También debe heredar el método promedio. Yo lo que hice fue hacer un método nuevo que se llamaba promedioAprobado, en donde puse si promedio era mayor a 7, para meter la lógica de "alumnosDestacados" en la clase Alumno en lugar de Curso.

-Polimorfismo: Métodos de elegante y formal, ponerle un único nombre que sea distinto a esos dos, por ejemplo vestidoDeGala, y que en ese método tenga la lógica tanto para el hombre y la mujer en cada uno de esos casos.

Luego, en el método alumnosDestacados, en lugar de todo ese choclo se debería hacer un ^select alumnos: [x: x promedioBueno & x vestidoDeGala].

Lo que también se podría haber corregido es agregar un método que incluya a la lógica que está dentro del select que puse recién. Creería que hay que definir a ese método en la clase Alumnos, pero la verdad no lo sé. (Esto me faltó, pero el resto estaba bien).


Ejercicio 2:

Básicamente lo que hace eso es un map y un filter. El primer parámetro de la función es una lista, el segundo es la condición del filter y el tercero es la función que se mapea. Pongo un ejemplo así se entiende.

Si yo tengo las funciones esPar (que devuelve true si un número es par) y multiplicarPorDos (que recibe como argumento un entero y devuelve ese número multiplicado por 2), puedo invocar a la función de esta manera

f [1,2,3,4,5] esPar multiplicarPorDos = [4,8]

Una forma más declarativa de hacer esto, es justamente hacer una composición de un map y un filter (Perdón si pongo mal los paréntesis)

f lista a b = map(b).(filter(a) lista)

en el ejemplo anterior sería algo así

map(multiplicarPorDos).(filter(esPar) [1,2,3,4,5])


El ejercicio 3 no lo tenía tan bien y no me puedo acordar en dónde tenía los errores.
Gracias, lo tenes resuelto?

Mas alla de que sea un asco lo que hace "alumnosDestacados" en el Ejercicio 1), hay algun otro problema de concepto? Por ej, en Alumno? A todos los metodos de alumno les esta faltando el punto al final.. pero eso nose si entra como "error de concepto".
En cuanto a código no me corrigió el tema de los puntos al final de cada sentencia. Pongo la resolución de los ejercicios 1 y 2 en el post así no se pierde en los comentarios y lo pueden ver todos.
3) Me parece que es asi, no estoy segura

3.1) esSobreOfertado(Producto):- base(Producto,Precio),oferta(_,Producto,_), forall(oferta(_,Producto,Oferta), Oferta>Precio).

huboOfertaSuperior(Producto):- base(Producto,Precio),oferta(_,Producto,Oferta),Oferta>Precio.

noHuboOfertaSuperior(Producto):-base(Producto,_), not(huboOfertaSuperior(Producto)).

3.2) El hecho de que un predicado sea inversible, me permite poder preguntar cualquier tipo de consulta: un producto en particular, si algun producto cumple, o CUALES son los que cumplen, siempre y cuando esten bien generados las respuestas a las consultas seran correctas.

3.3) Devolvera falso por el concepto de universo cerrado, lo que no es verdadero (los hechos que hay en la base de conocimiento) sera falso.
URLs de referencia