Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[PdeP] Consulta Ejercicio
Autor Mensaje
bareel Sin conexión
Profesor del Modulo A
Moving Forward.
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 213
Agradecimientos dados: 45
Agradecimientos: 8 en 6 posts
Registro en: Oct 2011
Mensaje: #1
[PdeP] Consulta Ejercicio Ejercicios Paradigmas de Programación
Hola compañeros, cómo están?

Tengo una duda con un ejercicio en el que debo aplicar recursividad y me está dando muchos dolores de cabeza.
El punto pide calcular el tiempo de un viaje (es decir, sumar el tiempo de las escalas y los tramos).
Me encuentro calculando el tiempo de las escalas pero el resultado que me devuelve es incorrecto. Este es el código.



%vuelo(Codigo de vuelo, capacidad en toneladas, [lista de destinos] ).
vuelo(arg845, 30, [escala(rosario,0), tramo(2), escala(buenosAires,0)]).
vuelo(mh101, 95, [escala(kualaLumpur,0), tramo(9), escala(capeTown,2), tramo(15), escala(buenosAires,0)]).

tiempoTotalVuelo(Vuelo,Destinos):- vuelo(Vuelo,_,Destinos).%, tiempoDeEscalas(Destinos,TiempoEscalas).
tiempoDeEscalas([],0).
tiempoDeEscalas([X|Xs],TiempoEscalas):- member(escala(Ciudad,Tiempo),[X|Xs]), tiempoDeEscalas(Xs,TiempoTail),
TiempoEscalas is Tiempo + TiempoTail.




Haciendo esta prueba, me devuelve estos resultados:

50 ?- tiempoDeEscalas([escala(kualaLumpur,0), tramo(9), escala(capeTown,2), tramo(15), escala(buenosAires,0)],T).
T = 4 ;
T = 4 ;
T = 2 ;
T = 2 ;
T = 2 ;
T = 2 ;
T = 0 ;
T = 0 ;
T = 6 ;
T = 6 ;
T = 4 ;
T = 4 ;
T = 4 ;
T = 4 ;
T = 2 ;
T = 2 ;
T = 4 ;
T = 4 ;
T = 2 ;
T = 2 ;
T = 2 ;
T = 2 ;
T = 0 ;
T = 0.

Lo que quiero aplicar es lo que vimos en clase: sumar la cabeza + la cola aplicando una definición recursiva, pero no sé muy bien dónde estoy fallando.

Muchas gracias!!
23-08-2014 16:11
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
odin Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 38
Agradecimientos dados: 2
Agradecimientos: 11 en 11 posts
Registro en: May 2011
Mensaje: #2
RE: [PdeP] Consulta Ejercicio
estas poniendo demas esto: member(escala(Ciudad,Tiempo),[X|Xs])
usas una variable no unificada que hace combinatoria cada vez que se invoca
lo que te conviene es usar un predicado auxiliar que reciba uno de los tramos/escalas y te devuelva su duracion
23-08-2014 21:09
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
morterox Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3
Agradecimientos dados: 2
Agradecimientos: 7 en 1 posts
Registro en: Nov 2010
Mensaje: #3
RE: [PdeP] Consulta Ejercicio
Hola que tal, en el enunciado no decía que tenía que ser con recursividad así que en mi TP lo resolví con un findall.
El paradigma Lógico yo lo pienso como que todo es pattern matching y nada mas y eso me ayudó a pensar casi todo, te paso la resolución.

tiempoTotalVuelo(Codigo,TiempoTotal) :- vuelo(Codigo,_,ListaDestinos), findall(Valor,(member(TramoEscala,ListaDestinos),valorTramoEscala(TramoEscala,Valor)),ListaValores),sumlist(ListaValores,TiempoTotal).

valorTramoEscala(escala(_,Valor),Valor).
valorTramoEscala(tramo(Valor),Valor).


Espero te haya ayudado.
Saludos!

Martín.
25-08-2014 11:43
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
emilio_murray Sin conexión
Militante
OLA K ASE
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 54
Agradecimientos dados: 56
Agradecimientos: 7 en 6 posts
Registro en: Sep 2014
Mensaje: #4
RE: [PdeP] Consulta Ejercicio
(25-08-2014 11:43)morterox escribió:  Hola que tal, en el enunciado no decía que tenía que ser con recursividad así que en mi TP lo resolví con un findall.
El paradigma Lógico yo lo pienso como que todo es pattern matching y nada mas y eso me ayudó a pensar casi todo, te paso la resolución.

tiempoTotalVuelo(Codigo,TiempoTotal) :- vuelo(Codigo,_,ListaDestinos), findall(Valor,(member(TramoEscala,ListaDestinos),valorTramoEscala(TramoEscala,Valor)),ListaValores),sumlist(ListaValores,TiempoTotal).

valorTramoEscala(escala(_,Valor),Valor).
valorTramoEscala(tramo(Valor),Valor).


Espero te haya ayudado.
Saludos!

Martín.

Hola Martin, yo tambien tengo problemas con este ejercicio, probe tu resolucion del predicado y siempre da 2 en el tiempo.

Saludos,
Emilio.
14-09-2014 01:40
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.