Clips no imprime nada.
Intenté escribir el siguiente código en CLIPS para un proyecto escolar (aunque no entiendo por qué se hace IA en este lenguaje):
(deftemplate blood
(slot bt)
(multislot acc))
(deffacts acceptance
(blood (bt 0) (acc 0 0))
(blood (bt A) (acc 0 A))
(blood (bt B) (acc 0 B))
(blood (bt AB) (acc 0 A B AB)))
(defrule reading-input
=>
(printout t "¿Tipo de sangre del paciente? ")
(assert (patient (read)))
(printout t "¿Tipo de sangre del donante? ")
(assert (donor (read))))
(defrule check-acceptance
(patient ?patient)
(donor ?donor)
(blood (bt ?bt1) (acc ?acc1))
(test (member$ ?donor ?acc1))
=>
(printout t "La transfusión es segura" crlf))
Por alguna razón, no imprimiría nada para las entradas A y A, o cualquier otra cosa. También intenté esto con una declaración if then else, pero con el mismo resultado.
[prev code]
(blood (bt ?bt1) (acc ?acc1))
=>
(if (eq ?patient ?bt1)
then
(printout t ?bt1)
else
(printout t ?donor)))
La idea es escribir un programa que imprima si la transfusión de sangre es segura o no.
davy.ai
Revisión y Solución de Código en CLIPS
Según el código proporcionado, el programa de CLIPS no imprime ninguna salida para ciertos inputs dados. Después de examinar el código, queda bastante claro el motivo.
Problema 1: Lista de Parámetros Incorrecta en la Regla de Entrada
La regla de entrada
reading-input
no está correctamente definida con restricciones de parámetros. Por lo tanto, está causando problemas en la ejecución. La regla de parámetro se debe corregir de la siguiente manera:Problema 2: Declaración de Condicional Errónea en la Regla de Verificación
El segundo problema en el programa es la declaración
if-then-else
que posiblemente no dará los resultados correctos esperados. La forma correcta de la declaración condicional en la regla debería ser la siguiente:Código Funcional Completo
El código modificado con las correcciones se puede ver a continuación, que es completamente funcional para lograr el objetivo.
Con estas correcciones, el programa de CLIPS es perfectamente capaz de ejecutarse y entregar los resultados esperados.