Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[PdeP] ¿Por qué no funciona?
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] ¿Por qué no funciona? Trabajo practico Paradigmas de Programación
Buenas noches compañeros! Cómo andán?

Tengo una consulta sobre el paradigma lógico. No entiendo por qué no funciona lo siguiente:


enfermedad(gripe,aguda, virus, [congestionNasal,dolorDeCabeza,tos]).
enfermita(juan, [tos]).

sintomsof(A,X):-enfermedad(A, _, _, X).
enfermoDe(N, Ill):- sintomsof(Ill, R1|R1c), enfermita(N, R2|R2c), member(R1,R2|R2c).

Esta consulta arroja False, pero ahora cuando yo consulto directamente de esta manera, arroja True.

35 ?- member(tos,[congestionasal,dolordecabeza,tos]).
true.


Hay algo que no estoy viendo? Algún error?

Desde ya, les agradezco por la ayuda!!!
Buen fin de semana!
25-07-2014 20:20
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
CarooLina En línea
Colaborador
❥❥❥❥
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3.640
Agradecimientos dados: 1.218
Agradecimientos: 1.410 en 511 posts
Registro en: Sep 2010
Mensaje: #2
RE: [PdeP] ¿Por qué no funciona?
1) Trabaja en la expresividad, que es A, que es X?
2) 35 ?- member(tos,[congestionasal,dolordecabeza,tos]).
true.

Esto te tira "true" por que member se usa para saber si ese primero se incluye en la lista del segundo miembro dicho en castellano ja
3) que consulta te arroja false?

love
25-07-2014 20:30
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] CarooLina recibio 1 Gracias por este post
bareel (12-12-2016)
gan Sin conexión
Profesor del Modulo A
:ö:
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 286
Agradecimientos dados: 87
Agradecimientos: 143 en 47 posts
Registro en: Apr 2011
Mensaje: #3
RE: [PdeP] ¿Por qué no funciona?
Adhiero a lo que dice Caro, intentá ponerle nombres más expresivos a las variables (Nombre, Persona, Sintomas, Enfermedad, etcetc) y a los predicados. Si te lo lee un profesor así, dudo mucho que le caiga bien =P

Sobre lo del false, chequeaste que no te falte ligar alguna variable? A veces ese es el problema.
25-07-2014 21:23
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] gan recibio 1 Gracias por este post
bareel (12-12-2016)
sarasa Sin conexión
Empleado de Fotocopiadora
Apuntando al 4
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 43
Agradecimientos dados: 6
Agradecimientos: 6 en 5 posts
Registro en: May 2013
Mensaje: #4
RE: [PdeP] ¿Por qué no funciona?
Esta mal, estas preguntando si congestionNasal esta en [tos], por eso te tira false.

No se que queres lograr, pero cuando queres fijarte si una o algunas cosas de una lista yo siempre hacia
findall(Cosa, (member(Cosa,Lista1), member(Cosa,Lista2)), CosasEnComun),
CosasEnComun != [].
25-07-2014 21:30
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] sarasa recibio 1 Gracias por este post
bareel (12-12-2016)
rob. Sin conexión
Presidente del CEIT
Smile!
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.149
Agradecimientos dados: 126
Agradecimientos: 85 en 66 posts
Registro en: Dec 2010
Mensaje: #5
RE: [PdeP] ¿Por qué no funciona?
Vamos a lo concreto: member te arroja true porque estás buscando "tos" en la lista que pusiste después, donde también está "tos".


¿Tenés a mano el enunciado? sería mucho más simple para fijarse y de ser necesario elaborar alternativas.

wake me up when september ends!
25-07-2014 21:37
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rob. recibio 1 Gracias por este post
bareel (12-12-2016)
m68540534 Sin conexión
Profesor del Modulo A
3++ || 4--
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 260
Agradecimientos dados: 246
Agradecimientos: 188 en 69 posts
Registro en: Mar 2013
Mensaje: #6
RE: [PdeP] ¿Por qué no funciona?
Respondiendo concretamente a tu pregunta, como te dijo sarasa estás haciendo la consulta al revés, deberías invertir las listas, o sea member(R2,R1|R1c), o en su defecto, deberías haber preguntado ?- member(congestionasal,[tos]). , y ahí si te respondería false, básicamente eran consultas distintas, por eso arrojaban diferentes resultados.

Al margen de ese problema, tené en cuenta lo de los nombres, por ahí acá lo hiciste rápido porque querías poner un ejemplo de tu problema, no pasa nada, ponele que como mucho se complica a la hora de ayudarte, pero en tps o parciales te asesinan por hacer eso, y estando en pc conviene acostumbrarse a hacerlo bien de una, por más que estés probando. Por ejemplo sintomsof(A,X) no tengo idea que hace, en cambio sintomas(Enfermedad,Sintomas) es mucho más claro.

Y algo más importante todavía, no sé que intentabas hacer, pero tené en cuenta que en lo que pasaste preguntás si el primer elemento de la lista de síntomas de una enfermedad pertenece a la lista de síntomas de la persona, cuando probablemente lo que necesitabas ver es si ALGUNO de los síntomas, o si TODOS los síntomas de una lista pertenece a la otra lista de síntomas. Pero habría que ver el enunciado para saber exactamente que es lo que pedía.

Compilado para aprobar la cursada de Matemática Discreta - http://www.utnianos.com.ar/foro/tema-lib...-parciales
26-07-2014 00:15
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] m68540534 recibio 1 Gracias por este post
bareel (12-12-2016)
cplhenderson Sin conexión
Militante
OMG Todo menos Fiorante T__T
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 74
Agradecimientos dados: 11
Agradecimientos: 12 en 12 posts
Registro en: May 2011
Mensaje: #7
RE: [PdeP] ¿Por qué no funciona?
Este es el enunciado.
Doctor Online
[functores, hechos, reglas, predicados ]
Un grupo de médicos con gran espíritu altruista, están muy interesados en ayudar a la humanidad. Para esto nos piden un sistema que los ayude tanto tanto en el diagnóstico de enfermedades como en el tratamiento de las mismas.

Definir la base de conocimiento teniendo en cuenta la siguiente información:
Las enfermedades las clasificamos según su duración, pueden ser agudas o crónicas, las agudas están representada por un nombre y por qué está causada (virus o bacteria) y las crónicas además de lo anterior por la cantidad de años que la tiene.
La gripe es una enfermedad aguda causada por virus y tiene como síntomas congestión nasal, dolor de cabeza y tos.
La meningitis es aguda y puede estar causada por virus o bacterias. En cuanto a los síntomas de la meningitis se conoce fiebre, vómitos, dolor de cabeza.
La tuberculosis es una enfermedad aguda causada por una bacteria con síntomas como cansancio, tos, sudoración.
La enfermedad pulmonar obstructiva crónica (epoc) está causada tanto por virus como bacterias y tiene síntomas como disnea, que aparece entre el quinto y el décimo año, y tos, que aparece entre el primer y tercer año.
analia tiene dolor de cabeza, congestión nasal y cansancio.
jorge tiene somnolencia, cansancio y disnea.
nadia tiene fiebre, dolor de cabeza y congestión nasal.
juan tiene tos.
la tos se alivia con jarabe.
el cansancio se alivia con vitaminas.
el paracetamol alivia tanto la fiebre como el dolor de cabeza.
La disnea se alivia con broncodilatadores.

Se pide:
Realizar las consultas que permita conocer para una enfermedad qué síntomas produce.
Definir el predicado enfermoDe/2, que relaciona una persona con una enfermedad, una persona se enferma de dicha enfermedad si tiene al menos 2 síntomas de dicha enfermedad.
Definir el predicado tratar/2 relaciona una enfermedad y un medicamento que sirve para aliviar algún síntoma de dicha enfermedad.
Definir el predicado sugerir/2, que relaciona una persona con un medicamento siempre y cuando este ayude a aliviar la enfermedad que contrajo la persona.
Definir el predicado bacteriana/1 que recibe una enfermedad y es bacteriana si es causada por bacterias.
Se agrega lo siguiente a la base de conocimiento:
enfermero(martha).
doctor(foreman, neurologo).
doctor(house, nefrologia).

Definir el predicado loPuedeAtender/3 que dado una persona, una enfermedad y un profesional de la salud nos permite saber si éste puede atender a la persona, los pueden atender si la persona está enferma y además:

Si son enfermeros sólo si la enfermedad del paciente es aguda.
Si son doctores atienden sólo a pacientes con enfermedades bacterianas o si son crónicas con más de 5 años.

La joda con este ejercicio es que no es muy explicito, ya que las enfermedades hay que armarlas por ejemplo de la siguiente manera:

aguda(gripe,virus).

cronica(epoc,virus,_).
cronica(epoc,bacteria,_).

sintomas(aguda(gripe,virus),congestionNasal).
sintomas(aguda(gripe,virus),dolorDeCabeza).
sintomas(aguda(gripe,virus),tos).


Esto es solo para las enfermedades, es asi ya que en mi curso ya lo revisamos y se hace asi. =D En el caso de que no quieras usar la expresividad vas a tener que comentar como un loco(casi hacer un libro de lo que quieren decir tus funciones o predicados como en este caso). No te puedo ayudar mucho mas sino te hago el ejercicio, solo te puedo decir que te la complicaste al pepe, sin embargo si lo que te puse yo no lo entendiste, uso el razonamiento tuyo se puede hacer.

enfermedad(Enfermedad,Duracion,VirusOBacteria,ListaDeSintomas).
paciente(Paciente,ListaDeSintomasDelPaciente).

enfermoDe(Persona,Enfermedad):-
paciente(Persona,[Sintoma1|Sintoma2|OtrosSintomas]),
enfermedad(Enfermedad,_,_,ListaDeSintomas),
member(Sintoma1,ListaDeSintomas),
member(Sintoma2,ListaDeSintomas).
(Este mensaje fue modificado por última vez en: 26-07-2014 02:53 por cplhenderson.)
26-07-2014 02:52
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] cplhenderson recibio 1 Gracias por este post
bareel (12-12-2016)
rob. Sin conexión
Presidente del CEIT
Smile!
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.149
Agradecimientos dados: 126
Agradecimientos: 85 en 66 posts
Registro en: Dec 2010
Mensaje: #8
RE: [PdeP] ¿Por qué no funciona?
Bueno, primero que nada, pensá que resolver un exámen del paradigma lógico depende PURA Y EXCLUSIVAMENTE de la base de conocimiento que armás, así que tené mucho cuidado armandola.

Si bien lo de AGUDA y CRONICA está bien definido, yo tendría cuidado en la parte de síntomas, donde la parte del agente de la enfermedad ni lo mencionaría para que la enfermedad este solamente relacionada con el sintoma y punto. Ejemplos importantes:

sintoma(esAguda(gripe, _), congestionNasal).
sintoma(esAguda(gripe, _), dolorCabeza).
sintoma(esAguda(gripe, _), tos).
sintoma(esCronica(epoc, _, años), disnea):- (años >= 5), (años =< 10).
sintoma(esCronica(epoc, _, años), tos):- (años >= 1), (años =< 3).


En el ejemplo de los pacientes, yo haría algo como esto, porque armar una lista en la base de conocimiento huele peligroso:

persona(juan, sintoma(_, tos)).

(y así con cada sintoma que tuviese)

Analicemos lo siguiente: en el predicado enfermoDe, tenés que buscar todos los sintomas (hello, findall) que posee una persona para una enfermedad (si chequeas la base de conocimiento, hay siempre al menos 2, así que no habrá nada contradictorio), y verificar que sean 2 al menos. Por lo que mi propuesta sería
1- Genero todos los sintomas para esa enfermedad (garantizar inversibilidad es importante).
2- Armo una lista que exprese todos los sintomas que cumplan la condición (el paciente enfermo con esa enfermedad, saco su sintoma...).
3- Arme una interesante lista en el findall, luego entonces reviso si el tamaño de la lista es mayor o igual a 2.




Fijate si te sale, y sino seguí preguntando. Traté de no pasarte ninguna respuesta para que lo maquines un poco, pero si estás muy perdido avisá y en un "plan Z" te lo paso (lo tengo en un txt que armé en la máquina pensandolo de puro gusto). Total, si nunca entendiste nada de las clases, esto si te salva lo hace en un 0,5% =P

¡Éxitos!

wake me up when september ends!
(Este mensaje fue modificado por última vez en: 27-07-2014 16:28 por rob..)
27-07-2014 15:43
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rob. recibio 1 Gracias por este post
bareel (12-12-2016)
Joseph Sin conexión
Empleado de Fotocopiadora
O_O
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 40
Agradecimientos dados: 7
Agradecimientos: 63 en 7 posts
Registro en: Dec 2010
Mensaje: #9
RE: [PdeP] ¿Por qué no funciona?
;)

[Imagen: 04.gif]
(Este mensaje fue modificado por última vez en: 18-08-2014 01:04 por Joseph.)
17-08-2014 21:07
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Joseph recibio 1 Gracias por este post
bareel (12-12-2016)
Buscar en el tema
Enviar respuesta 




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



    This forum uses Lukasz Tkacz MyBB addons.