UTNianos

Versión completa: [AYUDA][PARADIGAMAS]
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola gente,

Me estoy rompiendo el coco con un ejercicio de PROLOG (lógico) que no me sale. Quizá alguien pueda darme una mano, lo dejo aca abajo. Muchas gracias de ante mano.

BASE DE CONOCIOMIENTOS:


linea(a,[plazaMayo,peru,lima,congreso,miserere,rioJaneiro,primeraJunta,nazca]).
linea(b,[alem,pellegrini,callao,gardel,medrano,malabia,lacroze,losIncas,urquiza]).
linea(c,[retiro,diagNorte,avMayo,independenciaC,plazaC]).
%etc

combinacion([lima,avMayo]).
combinacion([once,miserere]).
combinacion([pellegrini,diagNorte,nueveJulio]).
%etc



PROBLEMA: viajeFacil/2: que relaciona dos estaciones si puedo llegar facil de una a la otra, es decir si estan en la misma linea o solo se requiere una combinacion.
Tiene logica repetida, pero funca

viajeFacil(Estacion1, Estacion2) :-
estaEn(Estacion1, Linea),
estaEn(Estacion2, Linea).
viajeFacil(Estacion1, Estacion2) :-
combinacion(Estaciones1),
combinacion(Estaciones2),
member(Estacion1, Estaciones1),
member(Estacion2, Estaciones2).
matiii_90, ¿con qué te rompiste el coco?

Contanos qué cosas se te ocurrieron, qué probaste, qué resultados conseguiste y cuáles no, como para poder darte una mano.

Tirarte un puñado de código que funciona, así sin más, no aporta mucho :/

Por otro lado, creo que el código que tiró MrGG no funciona bien. viajeFacil(lima, diagNorte) creo que devuelve false, cuando debería funcionar.

¿Cómo definís que dos estaciones pertenecen a una misma línea en términos de "existencia"? ¿Qué cosas tienen que existir, y qué relaciones/restricciones tiene que haber entre ellas?

Arrancá con esa, y después vemos cómo cambiaría para incluir el tema de la combinación.
a mi tambien me rompió el coco, lo pense de una manera y nada; pudiste resolverlo?
Buenas! Quizás si te damos un empujoncito podés encararlo:

La consigna establece que hay que definir un predicado viajeFacil/2 que relaciona 2 estaciones sólo si se puede viajar fácil de la primera a la segunda, es decir, que están en la misma línea, o bien, sólo es necesaria una combinación para llegar.

Desglosemos la condición compuesta en 2 simples:
  1. Si están en la misma línea de subte.
  2. Si sólo es necesaria una combinación.

Además, nos dan una base de conocimiento bastante piola y simple:


linea(a,[plazaMayo,peru,lima,congreso,miserere,rioJaneiro,primeraJunta,nazca]).
linea(b,[alem,pellegrini,callao,gardel,medrano,malabia,lacroze,losIncas,urquiza]).
linea(c,[retiro,diagNorte,avMayo,independenciaC,plazaC]).
%etc
combinacion([lima,avMayo]).
combinacion([once,miserere]).
combinacion([pellegrini,diagNorte,nueveJulio]).


Las preguntas que deberías hacerte primero son:
  1. ¿Cómo hago para saber si una estación pertenece a la misma línea de subte que otra?
  2. ¿Cómo sé si hace falta una sóla combinación para llegar de una estación a otra?

Te doy una pista: existe un predicado denominado member/2 que relaciona un elemento (1er argumento) y un conjunto (2do argumento) si y sólo si el elemento pertenece a dicho conjunto. Por ejemplo, para saber si la estación retiro pertenece a la línea c simplemente consultamos:


linea(c, Estaciones), member(retiro, Estaciones). true.


(12-07-2016 22:14)Ivanorr1s escribió: [ -> ]Buenas! Quizás si te damos un empujoncito podés encararlo:

La consigna establece que hay que definir un predicado viajeFacil/2 que relaciona 2 estaciones sólo si se puede viajar fácil de la primera a la segunda, es decir, que están en la misma línea, o bien, sólo es necesaria una combinación para llegar.

Desglosemos la condición compuesta en 2 simples:
  1. Si están en la misma línea de subte.
  2. Si sólo es necesaria una combinación.

Además, nos dan una base de conocimiento bastante piola y simple:


linea(a,[plazaMayo,peru,lima,congreso,miserere,rioJaneiro,primeraJunta,nazca]).
linea(b,[alem,pellegrini,callao,gardel,medrano,malabia,lacroze,losIncas,urquiza]).
linea(c,[retiro,diagNorte,avMayo,independenciaC,plazaC]).
%etc
combinacion([lima,avMayo]).
combinacion([once,miserere]).
combinacion([pellegrini,diagNorte,nueveJulio]).


Las preguntas que deberías hacerte primero son:
  1. ¿Cómo hago para saber si una estación pertenece a la misma línea de subte que otra?
  2. ¿Cómo sé si hace falta una sóla combinación para llegar de una estación a otra?

Te doy una pista: existe un predicado denominado member/2 que relaciona un elemento (1er argumento) y un conjunto (2do argumento) si y sólo si el elemento pertenece a dicho conjunto. Por ejemplo, para saber si la estación retiro pertenece a la línea c simplemente consultamos:


linea(c, Estaciones), member(retiro, Estaciones). true.



la parte 1 está, la parte 2 es la cuestión u.u

"¿Cómo sé si hace falta una sóla combinación para llegar de una estación a otra?"
(14-07-2016 15:25)MelisaGodoy escribió: [ -> ]la parte 1 está, la parte 2 es la cuestión u.u

"¿Cómo sé si hace falta una sóla combinación para llegar de una estación a otra?"

Para probar que sólo hace falta una combinación para llegar de una a otra es necesaria una consulta existencial.

Pensémoslo de manera coloquial, por ejemplo, si quiero llegar de lima a independencia:

1. Verificar que estén en la misma línea (Falso).
2. Buscar una combinación que me sirva. ¿Cuándo me sirve?

Una combinación me sirve si y sólo si:
1. En mi línea de subte existe alguna estación con la que pueda hacer combinación (Verdadero).
2. Si puedo hacer combinación:
i. Esa combinación me lleva directo a esa estación (Falso).
ii. Esa combinación me lleva a una estación de una línea de subte distinta que tiene, como estación, a independencia (Verdadero).
URLs de referencia