Ich habe die folgende Jess-Regel geschrieben, um sie in einer Protege-Ontologie zu verwenden.
(mapclass Cliente)
(defrule perfil-familia-numerosa
?cliente <- (object (is-a Cliente)
(nombre ?name)
(discapacidad? ?discapacity)
(distrito_deseado ?desired_district)
(n_miembros_familia ?n)
(presupuesto_maximo ?max)
(presupuesto_minimo ?min))
(test (> n 4))
=>
(assert (perfil-cliente ?name soltero)))
Wenn ich versuche, es auf der Registerkarte Jess einzugeben, erhalte ich einen Schreibfehler Jess reported an error in routine > [...] java.lang.Integer cannot be cast to java.lang.String
.
Allerdings handelt es sich bei dem betreffenden Slot um eine Ganzzahl, weshalb mir nicht klar ist, warum Jess ihn als String behandelt.
Antworten:
2 für die Antwort № 1Das Problem ist hier:
(test (> n 4))
Ein Verweis auf eine gebundene Variable behält das "?" Bei, sodass Sie schreiben müssen
(test (> ?n 4))
Es ist jedoch möglicherweise besser, diese Einschränkung zu hinzufügen (n_miembros_familia ?n)
.
(n_miembros_familia ?n&:(> ?n 4))