Ejemplo de la gestion de una Universidad


(deftemplate persona "Datos de una persona ya sea alumno o profesor"
(slot dni
(type INTEGER)
(default ?NONE))
(slot nombre
(type STRING)
(default ?DERIVE))
(slot apellidos
(type STRING)
(default ?DERIVE))
(slot edad
(type INTEGER)
(range 1 100)
(default ?DERIVE))
(slot login
(type SYMBOL)
(default ?DERIVE))
)

;Ahora representamos la Asignatura.
(deftemplate asignatura "Los datos de la asignatura"
(slot id_asignatura
(type INTEGER)
(default ?NONE))
(slot nombre
(type STRING)
(default ?DERIVE))
(slot profesor    ; el DNI DEL PROFESOR, es una persona
(type INTEGER) 
(default ?DERIVE))
)

;Ahora representamos la relacion persona - matricula
(deftemplate evaluacion "Relacion de la evaluacion persona - asignatura"
(slot id_asignatura
(type INTEGER)
(default ?NONE))
(slot dni_alumno
(type INTEGER)
(default ?NONE))
(slot convocatoria
(type SYMBOL)
(allowed-values diciembre junio septiembre)
(default ?DERIVE)) ; Se empieza a contar por la primera, esto seria la fecha
(slot nota
(type FLOAT)
(range 0.0 10.0)
(default ?DERIVE))
)

; regla para ver los alumnos que han aprobado...
(defrule aprobados
(evaluacion (dni_alumno ?x) (nota ?y))
(test (>= ?y 4.99))
(persona (dni ?x) (nombre ?z) (apellidos ?w))
=>
(printout t "Aprobado " ?z ?w "con un nota de " ?y crlf)
)