J'ai lu here comment appeler une fonction python sur la règle lhs d'une séquence.Fonction Python dans la règle LHS of CLIPS appelée plusieurs fois - comment attendre qu'une variable contienne une valeur?
Maintenant, j'ai la règle suivante:
(defrule python_func_lhs "comment me"
(object (is-a clips_TEST_CLASS) (some_slot ?some_slot_value))
(test (eq (python-call python_print (str-cat "some_slot: " ?some_slot_value)) TRUE))
=>
;(assert (do_something))
)
Mon problème est que la fonction python est appelé deux fois, d'abord l'impression
some_slot: néant
puis
some_slot: some_slot_value
Il semble que la deuxième partie de la règle contenant la fonction python ne pas « attendre » pour la première partie de la règle LHS à apparier.
Comment puis-je faire en sorte que les clips n'appellent la fonction python qu'une seule fois, une fois que la première partie de la règle LHS a été mise en correspondance? En d'autres termes, je souhaite attendre que la variable ?some_slot_value
ait une valeur.
Si possible, je voudrais éviter de créer plusieurs règles et d'utiliser des «faits de contrôle».
Qu'est-ce que Jess a à voir avec cela? – laune
@laune la question n'est pas spécifique à pyclips. En jess, il devrait aussi être possible d'appeler une fonction java sur les lhs d'une règle. Mais vous avez raison, je vais reformuler la question ou supprimer la balise. – stackoverflowwww
Je viens d'essayer '(deffacte someData (Data (obj (new String" A "))))' et '(defrule find? Data <- (Data (obj? A)) (test (eq (call? une longueur) 1)) => (printout t "trouver exécuté" crlf)) 'dans Jess et ça marche bien. – laune