UTNianos

Versión completa: [Consulta] Paradigma Lógico Between
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas gente, tengo una duda con el siguiente ejercicio de lógico, el enunciado es el siguiente:


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 estan 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.



Mi duda es con el tema de la duracion en cuanto a los sintomas disnea y tos en la epoc, estaría bien plantear la base de conocimientos así?


sintomas(cronica(epoc,virus,between(5,10,Duracion)),disnea).
sintomas(cronica(epoc,bacteria,between(5,10,Duracion)),disnea).
sintomas(cronica(epoc,virus,between(1,3,Duracion)),tos).
sintomas(cronica(epoc,bacteria,between(1,3,Duracion)),tos).

¡Hola!


¿Lo probaste? ¿Funciona?

Digo, está bueno que, si bien no es garantía de haber hecho las cosas bien, tenemos la compu para probar las cosas. Es una gran ventaja que tenemos en nuestra carrera (no veo factible que los de Civil se pongan a construir un puente en el patio de la casa para ver si determinado ancho de viga soporta el peso o bleh =)), ¡no la desaprovechemos!


Pasando a lo que planteás, no, no va a funcionar. Lo que estás definiendo ahí son hechos. Los hechos son "verdades" de tu base de conocimiento. Y lo que estás haciendo ah´ˆ, al poner el between/3, es declarar un functor llamado between. Porque, ¿qué diferencia hay entre tu cronica/3 y between/3 en eso que escribiste? ¿Cómo sabría prolog que uno es un functor y el otro una relación?

Lo que vos querés hacer es definir ciertas cosas como ciertas sólo en algunos casos (en particular, en los casos en que la tercer componente del functor cronica esté entre otros dos valores). Para definir esas "verdades condicionales" existen las reglas.

En las reglas, establecés una implicación lógica: algo es cierto sólo cuando este otro conjunto de cosas es cierta.

Podés leer un poco más en la wiki de Uqbar: Un poco de nomenclatura e Introducción.

Habiendo leído eso, ¿cómo lo resolverías?


¡Un abrazo!
Yo lo haría así:



sintomas(cronica(epoc,virus,Duracion,disnea)):-
between(5,10,Duracion).


Muchas gracias a los dos!
Estaba re trabado con esto, no tocaba lógico hace rato y bueno =P
gracias nuevamente.
URLs de referencia