Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Duda] Ejercicio Prolog Final 03/12/2016
Autor Mensaje
nanohueso Sin conexión
Profesor del Modulo A
Thats what she said
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 200
Agradecimientos dados: 166
Agradecimientos: 16 en 12 posts
Registro en: Feb 2012
Mensaje: #1
[Duda] Ejercicio Prolog Final 03/12/2016 Finales Paradigmas de Programación
Buenas gente,estoy con una duda con el ejercicio de Prolog del final del 03/12/2016 ... dice asi

Parte B
Tenemos el siguiente código Prolog para armar un programa que ayude a organizar la cursada:

% relaciona una materia con el año
% en el que se cursa

materia(troncal(ads), 2).
materia(electiva(tadp, 5), 3).
materia(electiva(rrhh, 3), 3).
materia(obligatoria(pdep), 2).

%relaciona dos nombres de materias tal que
% la segunda es correlativa de la primera

correlativa(tadp, pdep).
correlativa(NombreElectiva, NombreTroncal):-
materia(troncal(NombreTroncal), Anio),
Anio is Anio + 1,
materia(electiva(NombreElectiva, _), Anio).


1. La solución propuesta para el predicado correlativa/2 tiene un problema. Indicar cuál es justificando
conceptualmente por qué no es correcto.

2. Se agrega el siguiente predicado a nuestro programa:

habilitan(NombresMateriasAprobadas, NombreMateria):-
forall(correlativa(NombreMateria, NombreAprobada),
member(NombreAprobada,NombresMateriasAprobadas)).

Asumiendo que los problemas del predicado correlativa/2 son arreglados, indicar V/F para cada afirmación y
justificar.
a. habilitan/2 no es inversible respecto a su primer parámetro. Lo correcto sería armar una lista con
todas las materias para que pueda usarse de forma existencial.
b. habilitan/2 es inversible respecto a su segundo parámetro, porque correlativa/2 es inversible.
c. habilitan/2 no es inversible respecto a su segundo parámetro, y convendría tratar polimórficamente a
las materias para generar dicha variable.


Para el punto 1) respondo lo siguiente :


correlativa(tadp,pdep).
correlativa(NombreElectiva,NombreTroncal) :-
materia(troncal(NombreTroncal),Anio),
AnioSiguiente is Anio + 1 ,
materia(electiva(NombreElectiva,_),AnioSiguiente).


/* (1) */
/* La sentencia Anio is Anio + 1 nunca va a ser Verdadera , Anio nunca puede ser Anio + 1 .
Lo correcto seria : AnioSiguiente is Anio + 1 , materia(electiva(NombreElectiva,_),AnioSiguiente)*/


Y la duda la tengo con el punto 2.a :

Es VERDADERO que no es inversible el primer parametro. El tema es que no se soluciona el problema de la inversibilidad al armar la lista de todas las materias . ¿ Que sucede si le paso el parametro ya ligado ? NO se puede .
Me refiero a armar algo asi por ejemplo :


habilitan(NombresMateriasAprobadas, NombreMateria) :-
findall(NombreAprobada,correlativa(NombreMateria,NombreAprobada),ListaNombresMateriasAprobadas),
NombresMateriasAprobadas is ListaNombresMateriasAprobadas,
forall(correlativa(NombreMateria,NombreAprobada) , member(NombreAprobada,NombresMateriasAprobadas)).

Si NombresMateriasAprobadas no esta ligada, entonces OK , se liga y devolvera esa lista con las materias aprobadas necesarias para hacer la NombreMateria . Sin embargo, si le paso NombresMateriasAprobadas ya ligada entonces estaria armando la lista sobre esa misma variable...

¿Como se soluciona este problema de inversibilidad ??
13-12-2016 19:34
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
damianvc31 Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 49
Agradecimientos dados: 15
Agradecimientos: 22 en 16 posts
Registro en: Mar 2016
Mensaje: #2
RE: [Duda] Ejercicio Prolog Final 03/12/2016
Yo di ese final y tampoco se como resolver ese punto, se necesitaría como vos decís, que si no viene ligada se arme una lista con las correlatividades necesarias para la materia dada, pero si ya te pasan una lista de materias, solamente se debería chequear que las correlativas sean miembro de esa lista, no que sea exactamente la misma lista.
Se que hay que usar un findall en algun lado pero no se donde ni como usarlo.
14-12-2016 02:06
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] damianvc31 recibio 1 Gracias por este post
nanohueso (15-12-2016)
Buscar en el tema
Enviar respuesta 




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



    This forum uses Lukasz Tkacz MyBB addons.