Question

Comment tester l'existence de fait dans l'ERS des règles Clips ? j'essaye de concevoir une règle qui « score » l'état actuel en comptant le nombre de faits existent but. Il est évident comment tester des faits dans le LHS, mais je ne peux pas trouver comment faire l'équivalent dans l'ERS.

Je veux faire quelque chose comme ça, mais ce n'est pas valide le code Clips:

(defrule score-state ""
    ?score <- (score (value ?value))
    =>
    (modify ?score (value (+ (exists (goal-1)) (exists (goal-2)) (exists (goal-3))))))

Alors que si aucun des états de but existe, alors il existerait le fait (score (valeur 0)). A l'inverse, si tous les états de but existait, il existerait le fait (score (valeur 3)).

Le manuel de référence mentionne la fonction fait-existp, mais cela semble exiger il est passé d'une adresse de fait. J'ai essayé de l'utiliser comme (fait-existp (but-1)), mais Clips me donne une erreur de syntaxe.

Était-ce utile?

La solution

(deftemplate score
   (slot value))

(deftemplate goal-1)

(deftemplate goal-2)

(deftemplate goal-3)

(deffacts start
   (score (value undefined))
   (goal-1)
   (goal-3))

(deffunction ecount (?g)
   (if (any-factp ((?f ?g)) TRUE)
      then (return 1)
      else (return 0)))

(defrule score-state ""
    ?score <- (score (value undefined))
    =>
    (modify ?score (value (+ (ecount goal-1) (ecount goal-2) (ecount goal-3)))))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top