Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


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

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 225
Agradecimientos dados: 49
Agradecimientos: 9 en 7 posts
Registro en: Oct 2011
Mensaje: #1
[PdeP] Functores Trabajo practico Paradigmas de Programación
Hola compañeros, cómo están?
Yo, acá haciendo ejercicios del paradigma lógico. Logré comprender bastante pero me trabé en un tema y no puedo avanzar.

Tengo esta base de conocimientos:

%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)]).
vuelo(DLH470, 60, [escala(berlin,0), tramo(9), escala(washington,2), tramo(2), escala(nuevaYork,0)]).
vuelo(AAL1803, 250, [escala(nuevaYork,0), tramo(1), escala(washington,2), tramo(3), escala(ottawa,3), tramo(15), escala(londres,4), tramo(1), escala(paris,0)]).
vuelo(BLE849, 175, [escala(paris,0), tramo(2), escala(berlin,1), tramo(3), escala(kiev,2), tramo(2), escala(moscu,4), tramo(5), escala(seul,2), tramo(3), escala(tokyo,0)]).
vuelo(NPO556, 150, [escala(kiev,0), tramo(1), escala(moscu,3), tramo(5), escala(nuevaDelhi,6), tramo(2), escala(hongKong,4), tramo(2), escala(shanghai,5), tramo(3), escala(tokyo,0)]).
vuelo(DSM3450, 75, [escala(santiagoDeChile,0), tramo(1), escala(buenosAires,2), tramo(7), escala(washington,4), tramo(15), escala(berlin,3), tramo(15), escala(tokyo,0)]).


Básicamente, quería saber si me pueden orientar para resolver el primer ejercicio/predicado:
tiempoTotalVuelo/2 : Relaciona un vuelo con el tiempo que lleva en total, contando las esperas en las escalas (y eventualmente en el origen y/o destino) más el tiempo de vuelo.

El único predicado que armé es el siguiente (me devuelve la lista de escalas y tramos):


[b]listaDestinos(Vuelo,[X]):- findall(A,vuelo(Vuelo,30,A),[X|Xs]).[/b]



Ahora lo que no sé, es como trabajar sobre cada functor.

Alguien podría darme una mano, por favor?

Saludos!!
30-07-2014 22:47
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
cplhenderson Sin conexión
Militante
OMG Todo menos Fiorante T__T
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 73
Agradecimientos dados: 13
Agradecimientos: 12 en 12 posts
Registro en: May 2011
Mensaje: #2
RE: [PdeP] Functores
Tenes el enunciado a mano? pasalo por ahi lo puedo entender mejor.
Una cosa que es cada functor ejemplo escala(Ciudad,Numero/*no se que representa*/) y tramo(Numero/*no se que representa*/) ya que asi a simple vista puede representar cualquier cosa.

otra cosa la lista de escalas y tramos ya la tenes no necesitas usar findall para eso, podes hacer algo asi:
listaDeDestinos(vuelo(_,_/*aca hay otro numero que no se que representa no se si es necesario*/,ListaDeDestinos),ListaDeDestinos).

lo que haces con ese findall es armar una lista de todas las listas de escalas y tramos de aquellos vuelos que tienen un valor Vuelo y un valor 30 algo asi vuelo(Vuelo,30,ListaDeEscalas) o sea que al final si vos tenes otro vuelo que es igual a Vuelo y tiene un valor 30 te los va a agregar a la lista.
(Este mensaje fue modificado por última vez en: 30-07-2014 23:48 por cplhenderson.)
30-07-2014 23:17
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
m68540534 Sin conexión
Profesor del Modulo A
3++ || 4--
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 260
Agradecimientos dados: 252
Agradecimientos: 214 en 71 posts
Registro en: Mar 2013
Mensaje: #3
RE: [PdeP] Functores
Bueno, faltaría el enunciado para ver bien como viene dada la información de la base de conocimiento. Supongo que un vuelo es el código ese alfanumérico y no todo el functor, pero no se como lo definieron.

Para encararlo lo primero que tenés que hacer es abstraer, vos necesitás el tiempo de escala y el tiempo de vuelo. Además ya sabés que formato va a tener el predicado porque te lo dicen ellos, relaciona vuelos con tiempo total:

tiempoTotalVuelo(Vuelo,TiempoTotal):-
tiempoEscalas(Vuelo,TiempoEscalas),
tiempoVuelo(Vuelo,TiempoVuelo),
TiempoTotal is TiempoEscalas + TiempoVuelo.

Ahora vemos el tema de las escalas, lo que tenés que hacer es encontrar todas las escalas de un vuelo y meter sus duraciones en una lista (para usar el sumlist). Se puede hacer así:

tiempoEscalas(Vuelo,TiempoEscalas):-
vuelo(Vuelo,_,Escalas),
findall( TiempoEscala, member( escala(_,TiempoEscala), Escalas ), ListaTiempoEscalas),
sumlist(ListaTiempoEscalas,TiempoEscalas).

Ahora faltaría nomás sacar el tiempo de vuelo, que no tengo idea como se calcula. Subí el enunciado si querés y se puede ver, pero calculo que no esto ya deberías poder seguir solo si lo entendés. Cualquier cosa volvé a preguntar.

PD: ojo con la base de conocimiento, están lo vuelos en mayúscula, acordate que los literales tienen que empezar siempre con minúscula, sino los considera variables. Antes de probar nada cambiá aunque sea la primer letra de cada uno, el único que está bien es el arg845.

Compilado para aprobar la cursada de Matemática Discreta - http://www.utnianos.com.ar/foro/tema-lib...-parciales
31-07-2014 00:43
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
bareel Sin conexión
Profesor del Modulo A
Moving Forward.
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 225
Agradecimientos dados: 49
Agradecimientos: 9 en 7 posts
Registro en: Oct 2011
Mensaje: #4
RE: [PdeP] Functores
Chicos, les paso todo el enunciado. Desde ya les re agradezco por su ayuda!!

Una agencia de viajes lleva un registro con todos los vuelos que maneja de la siguiente manera: vuelo(Codigo de vuelo, capacidad en toneladas, [lista de destinos] ). Esta lista de destinos está compuesta de la siguiente manera: escala(ciudad, tiempo de espera) tramo(tiempo en vuelo) Siempre se comienza de una ciudad (escala) y se termina en otra (no puede terminar en el aire al vuelo), con tiempo de vuelo entre medio de las ciudades. Considerar que los viajes son de ida y de vuelta por la misma ruta.

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)]).
vuelo(DLH470, 60, [escala(berlin,0), tramo(9), escala(washington,2), tramo(2), escala(nuevaYork,0)]).
vuelo(AAL1803, 250, [escala(nuevaYork,0), tramo(1), escala(washington,2), tramo(3), escala(ottawa,3), tramo(15), escala(londres,4), tramo(1), escala(paris,0)]).
vuelo(BLE849, 175, [escala(paris,0), tramo(2), escala(berlin,1), tramo(3), escala(kiev,2), tramo(2), escala(moscu,4), tramo(5), escala(seul,2), tramo(3), escala(tokyo,0)]). vuelo(NPO556, 150, [escala(kiev,0), tramo(1), escala(moscu,3), tramo(5), escala(nuevaDelhi,6), tramo(2), escala(hongKong,4), tramo(2), escala(shanghai,5), tramo(3), escala(tokyo,0)]). vuelo(DSM3450, 75, [escala(santiagoDeChile,0), tramo(1), escala(buenosAires,2), tramo(7), escala(washington,4), tramo(15), escala(berlin,3), tramo(15), escala(tokyo,0)]).

Definir los siguientes predicados; en todos vamos a identificar cada vuelo por su código.

tiempoTotalVuelo/2 : Relaciona un vuelo con el tiempo que lleva en total, contando las esperas en las escalas (y eventualmente en el origen y/o destino) más el tiempo de vuelo.
escalaAburrida/2 : Relaciona un vuelo con cada una de sus escalas aburridas; una escala es aburrida si hay que esperar mas de 3 horas.
ciudadesAburridas/2 : Relaciona un vuelo con la lista de ciudades de sus escalas aburridas.
vueloLargo/1: Si un vuelo pasa 10 o más horas en el aire, entonces es un vuelo largo. OJO que dice "en el aire", en este punto no hay que contar las esperas en tierra. conectados/2: Relaciona 2 vuelos si tienen al menos una ciudad en común. bandaDeTres/3: Relaciona 3 vuelos si están conectados, el primero con el segundo, y el segundo con el tercero. distanciaEnEscalas/3: Relaciona dos ciudades que son escalas del mismo vuelo y la cantidad de escalas entre las mismas; si no hay escalas intermedias la distancia es 1. P.ej. París y Berlín están a distancia 1 (por el vuelo BLE849), Berlín y Seúl están a distancia 3 (por el mismo vuelo). No importa de qué vuelo, lo que tiene que pasar es que haya algún vuelo que tenga como escalas a ambas ciudades. Consejo: usar nth1.
vueloLento/1: Un vuelo es lento si no es largo, y además cada escala es aburrida.


(31-07-2014 00:43)m68540534 escribió:  Bueno, faltaría el enunciado para ver bien como viene dada la información de la base de conocimiento. Supongo que un vuelo es el código ese alfanumérico y no todo el functor, pero no se como lo definieron.

Para encararlo lo primero que tenés que hacer es abstraer, vos necesitás el tiempo de escala y el tiempo de vuelo. Además ya sabés que formato va a tener el predicado porque te lo dicen ellos, relaciona vuelos con tiempo total:

tiempoTotalVuelo(Vuelo,TiempoTotal):-
tiempoEscalas(Vuelo,TiempoEscalas),
tiempoVuelo(Vuelo,TiempoVuelo),
TiempoTotal is TiempoEscalas + TiempoVuelo.

Ahora vemos el tema de las escalas, lo que tenés que hacer es encontrar todas las escalas de un vuelo y meter sus duraciones en una lista (para usar el sumlist). Se puede hacer así:

tiempoEscalas(Vuelo,TiempoEscalas):-
vuelo(Vuelo,_,Escalas),
findall( TiempoEscala, member( escala(_,TiempoEscala), Escalas ), ListaTiempoEscalas),
sumlist(ListaTiempoEscalas,TiempoEscalas).

m68540534 entiendo lo que planteaste, pero lo que no entiendo es esta línea del predicado tiempoEscalas(Vuelo,TiempoEscalaS).

findall( TiempoEscala, member( escala(_,TiempoEscala), Escalas ), ListaTiempoEscalas)

Digamos que armas una lista (ListaTiempoEscalas), de la cual realizás la sumatoria. Con el member "filtrás" los functores con forma escala(ciudad,tiempo)??


Gracias por tu ayuda!!
(Este mensaje fue modificado por última vez en: 31-07-2014 15:37 por bareel.)
31-07-2014 14:40
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Martin. Sin conexión
Presidente del CEIT
Enjoy it !
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.380
Agradecimientos dados: 88
Agradecimientos: 296 en 137 posts
Registro en: Oct 2011
Mensaje: #5
RE: [PdeP] Functores
Yo te lo hice así:

tiempoTotalVuelo(Vuelo,TiempoTotal) :-
vuelo(Vuelo,_,Escalas),
findall(TiempoViaje,tiempoViajado(Escalas,TiempoViaje),TiempoViaje),
sumlist(TiempoViaje,TiempoReal),
TiempoTotal is TiempoReal*2.

tiempoViajado(Lista,Tiempo):-
member(escala(_,Tiempo),Lista).

tiempoViajado(Lista,Tiempo):-
member(tramo(Tiempo),Lista).



Prueba:
tiempoTotalVuelo(Y,X).
Y = aRG845,
X = 4 ;
Y = mH101,
X = 52 ;
Y = dLH470,
X = 26 ;
Y = aAL1803,
X = 58 ;
Y = bLE849,
X = 48 ;
Y = nPO556,
X = 62 ;
Y = dSM3450,
X = 94.

Edité la base de conocimiento para que me permita hacer el predicado totalmente inversible.

[Imagen: jQJfyBGh9SOmZ.png]
(Este mensaje fue modificado por última vez en: 31-07-2014 16:34 por Martin..)
31-07-2014 15:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Martin. recibio 1 Gracias por este post
bareel (31-07-2014)
m68540534 Sin conexión
Profesor del Modulo A
3++ || 4--
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 260
Agradecimientos dados: 252
Agradecimientos: 214 en 71 posts
Registro en: Mar 2013
Mensaje: #6
RE: [PdeP] Functores
Bueno, es más o menos como pensaba entonces, pero el tiempo de vuelo se obtiene de manera muy similar al del tiempo de escala, así que para no repetir lógica podemos usar polimorfismo y obtener los dos tiempos a la vez. Modificó lo de arriba:



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)]).
vuelo(dLH470, 60, [escala(berlin,0), tramo(9), escala(washington,2), tramo(2), escala(nuevaYork,0)]).
vuelo(aAL1803, 250, [escala(nuevaYork,0), tramo(1), escala(washington,2), tramo(3), escala(ottawa,3), tramo(15), escala(londres,4), tramo(1), escala(paris,0)]).
vuelo(bLE849, 175, [escala(paris,0), tramo(2), escala(berlin,1), tramo(3), escala(kiev,2), tramo(2), escala(moscu,4), tramo(5), escala(seul,2), tramo(3), escala(tokyo,0)]).
vuelo(nPO556, 150, [escala(kiev,0), tramo(1), escala(moscu,3), tramo(5), escala(nuevaDelhi,6), tramo(2), escala(hongKong,4), tramo(2), escala(shanghai,5), tramo(3), escala(tokyo,0)]).
vuelo(dSM3450, 75, [escala(santiagoDeChile,0), tramo(1), escala(buenosAires,2), tramo(7), escala(washington,4), tramo(15), escala(berlin,3), tramo(15), escala(tokyo,0)]).

tiempoTotalVuelo(Vuelo,TiempoTotal):-
vuelo(Vuelo,_,Destinos),
findall( Tiempo, ( member(Destino,Destinos), duracion(Destino,Tiempo) ), TiemposDeEsperaYVuelo),
sumlist(TiemposDeEsperaYVuelo,TiempoTotal).

%Faltaría definir duracion/2. Lo hacemos polimórfico para que devuelva el tiempo tanto de escalas como de tramos. Con el uso de pattern matching y el "o" lógico es fácil.

duracion(escala(_,Tiempo),Tiempo).
duracion(tramo(Tiempo),Tiempo).


Acordate de usar identación (acá me suprime los tabs) y de modificar las mayúsculas de la base de conocimiento que te dije antes.

Ah, no había leido lo que pusiste abajo de todo. Vos necesitás la lista con todos los valores, así podés hacer uso del sumlist, entonces es fija que tenés que usar findall, que tiene tres partes: findall(LoQueQueres,ComoLoObtenes,ListaBuscada).

LoQueQueres el nombre de la variable que va a tener los elementos que vos queres meterle a la lista, en este caso los tiempos; en ComoLoObtenes tenés que escribir las relaciones que te permitan llegar al valor. Como en este caso lo que querés es un elemento que está dentro de un functor, que a su vez está dentro de una lista tenés que usar member y pattern matching.

member( Functores, Escalas ) te devolvería todos los escala(X,Y) y tramo(Z). Pero nosotros solo necesitabamos los functores de la forma escala(X,Y), y el valor de X (Ciudad) no nos interesa, entonces lo que queremos es algo de la forma escala(_,Y), y le damos nombre a Y para que sea más expresivo, quedando escala(_,TiempoEscala). Ahora como hacemos para que "filtre" los functores y nos de solo los de la forma que buscamos? Fácil, como en prolog la salida es un parámetro solamente tenemos que pasarselo al invocar el member. Entonces te queda:

member( escala(_,TiempoEscala), Escalas )

Lo que finalmente va a hacer es buscar por cada valor de Escalas (las listas con escalas y tramos) los elementos que matcheen con escala(_,TiempoEscala), y listo, de ahí sacás los tiempos que demora en cada escala y el findall los mete en la lista.

Compilado para aprobar la cursada de Matemática Discreta - http://www.utnianos.com.ar/foro/tema-lib...-parciales
(Este mensaje fue modificado por última vez en: 31-07-2014 16:49 por m68540534.)
31-07-2014 16:21
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] m68540534 recibio 1 Gracias por este post
bareel (31-07-2014)
bareel Sin conexión
Profesor del Modulo A
Moving Forward.
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 225
Agradecimientos dados: 49
Agradecimientos: 9 en 7 posts
Registro en: Oct 2011
Mensaje: #7
RE: [PdeP] Functores
La verdad, excelente explicación.
Yo no sabía como "filtrar" los functores y aplicar los conceptos pero ahora me quedó mucho más claro.

Muchas gracias m68540534!!!

Compañeros, los molesto de nuevo para chequear si hice bien el siguiente predicado:

escalaAburrida(Vuelo,ListaEscalasAburridas):- vuelo(Vuelo,_,ListaDestinos), findall((Ciudad,Tiempo),(member(escala(Ciudad,Tiempo),ListaDestinos),Tiempo>3,ListaDestinos),ListaEscalasAburridas).

Mi objetivo fue usar dos condiciones en el segundo argumento del findall.

Al parecer funciona pero me tira estos errores ....

1 ?- escalaAburrida(npo556,Salida).
ERROR: Type error: `file_path' expected, found `escala(kiev,0)'
ERROR: source_sink `tramo(1)' does not exist
ERROR: Type error: `file_path' expected, found `escala(moscu,3)'
ERROR: source_sink `tramo(5)' does not exist
ERROR: Type error: `file_path' expected, found `escala(nuevaDelhi,6)'
ERROR: source_sink `tramo(2)' does not exist
ERROR: Type error: `file_path' expected, found `escala(hongKong,4)'
ERROR: source_sink `tramo(2)' does not exist
ERROR: Type error: `file_path' expected, found `escala(shanghai,5)'
ERROR: source_sink `tramo(3)' does not exist
ERROR: Type error: `file_path' expected, found `escala(tokyo,0)'
ERROR: Type error: `file_path' expected, found `escala(kiev,0)'
ERROR: source_sink `tramo(1)' does not exist
ERROR: Type error: `file_path' expected, found `escala(moscu,3)'
ERROR: source_sink `tramo(5)' does not exist
ERROR: Type error: `file_path' expected, found `escala(nuevaDelhi,6)'
ERROR: source_sink `tramo(2)' does not exist
ERROR: Type error: `file_path' expected, found `escala(hongKong,4)'
ERROR: source_sink `tramo(2)' does not exist
ERROR: Type error: `file_path' expected, found `escala(shanghai,5)'
ERROR: source_sink `tramo(3)' does not exist
ERROR: Type error: `file_path' expected, found `escala(tokyo,0)'
ERROR: Type error: `file_path' expected, found `escala(kiev,0)'
ERROR: source_sink `tramo(1)' does not exist
ERROR: Type error: `file_path' expected, found `escala(moscu,3)'
ERROR: source_sink `tramo(5)' does not exist
ERROR: Type error: `file_path' expected, found `escala(nuevaDelhi,6)'
ERROR: source_sink `tramo(2)' does not exist
ERROR: Type error: `file_path' expected, found `escala(hongKong,4)'
ERROR: source_sink `tramo(2)' does not exist
ERROR: Type error: `file_path' expected, found `escala(shanghai,5)'
ERROR: source_sink `tramo(3)' does not exist
ERROR: Type error: `file_path' expected, found `escala(tokyo,0)'
Salida = [ (nuevaDelhi, 6), (hongKong, 4), (shanghai, 5)].


Evidentemente hay algún error, pero debería tenerlo en cuenta? Me refiero a que el objetivo se cumple, quizá sea algo del compilador que se deba ignorar.


Gracias!!!
(Este mensaje fue modificado por última vez en: 31-07-2014 21:25 por bareel.)
31-07-2014 20:33
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
m68540534 Sin conexión
Profesor del Modulo A
3++ || 4--
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 260
Agradecimientos dados: 252
Agradecimientos: 214 en 71 posts
Registro en: Mar 2013
Mensaje: #8
RE: [PdeP] Functores
Dos cosas:

1) El error que te tira es porque pusiste un ",ListaDestinos" después del Tiempo>3 que no va. Borralo y listo. Y nunca ignores un error xD.
2) En nigún momento el enunciado te pedía que hagas una lista. Tené cuidado con esto. Te pide que relaciones un vuelo con sus escalas aburridas, o sea con los functores escala(X,Y) que cumplan con la condición para ser aburridas. No te dice que relaciones un vuelo con una lista de escalas aburridas.
En prolog usas listas en situaciones muy específicas nomás, porque como existen las múltiples respuestas lo que normalmente hacés es ligar una variable con todos los posibles resultados, no hace falta la lista. Generalmente la generás cuando te lo dice explícitamente (como en ciudadesAburridas/2) o en casos como los de sumatoria para usar el sumlist.

Lo que tenías que hacer directamente es:

escalaAburrida(Vuelo,escala(Ciudad,Tiempo)):-
vuelo(Vuelo,_,ListaDestinos),
member(escala(Ciudad,Tiempo),ListaDestinos),
Tiempo > 3.

También puede ser conveniente hacer una abstracción más, esAburrida/1 que te diga si una escala es aburrida. Si te fijás, en el último predicado vueloLento/1 te puede venir bien esta abstracción. Y de todas maneras, por más que después no la necesitaras está bueno hacerla, uno porque hacés más expresivo tu código, dos no perdés el significado de "ser una escala aburrida", y tres demuestra mayor dominio del paradigma, lo cual sube puntos xD. Además es muy sencillo, sería así:

escalaAburrida(Vuelo,Escala):-
vuelo(Vuelo,_,ListaDestinos),
member(Escala,ListaDestinos),
esAburrida(Escala).

esAburrida(escala(_,Tiempo)):- Tiempo > 3.

Lo hice así para que veas que con la abstracción ya no necesitás usar patern matching y podés usar la variable "Escala" en vez del functor, pero en este caso en particular no estaría del todo bien porque Escala contendría también tramos. El resultado va a estar bien porque esAburrida va a filtrar todos los tramo(Z), pero para que quede bien bien:

escalaAburrida(Vuelo,escala(Ciudad,Tiempo)):-
vuelo(Vuelo,_,ListaDestinos),
member(escala(Ciudad,Tiempo),ListaDestinos),
esAburrida(escala(Ciudad,Tiempo)).

esAburrida(escala(_,Tiempo)):- Tiempo > 3.

Y si querés/te piden que esAburrida sea inversible:

esAburrida(escala(Ciudad,Tiempo)):-
vuelo(_,_,ListaDestinos),
member(escala(Ciudad,Tiempo),ListaDestinos),
Tiempo > 3.

Compilado para aprobar la cursada de Matemática Discreta - http://www.utnianos.com.ar/foro/tema-lib...-parciales
31-07-2014 22:20
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




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