13-12-2015, 11:13
Comparto mi solucion:
Spoiler: Mostrar
Me saque un 8 y ni idea en que me equivoque
Parte A
1)
a) Falso, La empresa deberia delegarle esa responsabilidad al medio de pago. Asi se lograria mas declaratividad y abstraccion en la solucion.. mas justificacion de esto ultimo
b) Falso, esta desarrollado para que sea polimorfico pero no esta implementado. Para lograrlo Empresa no debe y no necesita preguntar que tipo de tarjeta es para mandarle el mensaje pagar:
c) Verdadero (dudas), como no hay asignacion destructiva, no hay forma de modificar el dinero o la deuda de una persona
2) En el metodo pagar de la clase Efecto, por el lado falso de la pregunta, se podria llamar una excepcion. De esta forma se detiene el programa y no llega a ejecutarse el mensaje reservarAsiento
3)
#Empresa
>> vender: pasaje a: cliente
cliente medioDePago pagar: (pasaje costo) (Aca tuve dudas si mandarle un mensaje al cliente, y que luego el cliente le diga a su tarjeta que pague, creo que hubiera sido mejor)
pasaje micro reservarAsiento
#Efecto
>> pagar:monto
(dinero >= monto) ifTrue:[dinero:=dinero-monto]
ifFalse:[ ErrorDinero signal 'No alcanza el dinero']
Parte B
1) funcionA funcion destino destinos = (funcion.head.filter (esDe destino)) destinos
esDe destino (c,_,_) = destino == c
Se aproveho el orden superior para no repetir logica identica. Tambien se hizo mas declarativa la solucion delegando en la funcion esDe el criterio de filtro
2)
a) Error de tipo al comprar 5 con un string
b) Devuelve 425 correctamente
c) No devuelve nada porque la lista luego de filtrarse queda vacia
d) Hay error porque falta un parametro. Facil de confundirse con aplicacion parcial... si en la definicion de la funcion falta el parametro destinos no pasaba nada porque por aplicacion parcial se mandaba al final de la funcion, pero en la consulta tiene que estar el parametro
e) Devuelve 350 correctamente. No se mete con el /0 por la evaluacion diferida
Parte C
1)
noIncluidoEn(Destinos, DestinosVisitados, Destino):-
destinos(Destinos),
member(Destino,Destinos),
not(member(Destino,DestinosVisitados).
2) a) Falso, devuelve una o multiples respuestas segun sea el caso. El member unifica cada una de los elementos encontrados de la lista y los evalua a todos sin importar si alguno ya cumplio el predicado
b) Falso, devuelvo False, porque por el principio de universo cerrado todo lo que no esta definido es falso, y neuquen no esta definido en destinos
Parte A
1)
a) Falso, La empresa deberia delegarle esa responsabilidad al medio de pago. Asi se lograria mas declaratividad y abstraccion en la solucion.. mas justificacion de esto ultimo
b) Falso, esta desarrollado para que sea polimorfico pero no esta implementado. Para lograrlo Empresa no debe y no necesita preguntar que tipo de tarjeta es para mandarle el mensaje pagar:
c) Verdadero (dudas), como no hay asignacion destructiva, no hay forma de modificar el dinero o la deuda de una persona
2) En el metodo pagar de la clase Efecto, por el lado falso de la pregunta, se podria llamar una excepcion. De esta forma se detiene el programa y no llega a ejecutarse el mensaje reservarAsiento
3)
#Empresa
>> vender: pasaje a: cliente
cliente medioDePago pagar: (pasaje costo) (Aca tuve dudas si mandarle un mensaje al cliente, y que luego el cliente le diga a su tarjeta que pague, creo que hubiera sido mejor)
pasaje micro reservarAsiento
#Efecto
>> pagar:monto
(dinero >= monto) ifTrue:[dinero:=dinero-monto]
ifFalse:[ ErrorDinero signal 'No alcanza el dinero']
Parte B
1) funcionA funcion destino destinos = (funcion.head.filter (esDe destino)) destinos
esDe destino (c,_,_) = destino == c
Se aproveho el orden superior para no repetir logica identica. Tambien se hizo mas declarativa la solucion delegando en la funcion esDe el criterio de filtro
2)
a) Error de tipo al comprar 5 con un string
b) Devuelve 425 correctamente
c) No devuelve nada porque la lista luego de filtrarse queda vacia
d) Hay error porque falta un parametro. Facil de confundirse con aplicacion parcial... si en la definicion de la funcion falta el parametro destinos no pasaba nada porque por aplicacion parcial se mandaba al final de la funcion, pero en la consulta tiene que estar el parametro
e) Devuelve 350 correctamente. No se mete con el /0 por la evaluacion diferida
Parte C
1)
noIncluidoEn(Destinos, DestinosVisitados, Destino):-
destinos(Destinos),
member(Destino,Destinos),
not(member(Destino,DestinosVisitados).
2) a) Falso, devuelve una o multiples respuestas segun sea el caso. El member unifica cada una de los elementos encontrados de la lista y los evalua a todos sin importar si alguno ya cumplio el predicado
b) Falso, devuelvo False, porque por el principio de universo cerrado todo lo que no esta definido es falso, y neuquen no esta definido en destinos
Pd. Daban 2 hs para hacerlo y 10 min para verlo e irse