Comment obtenir une activation de règles pour appeler une fonction Python, en utilisant des pyclips
-
12-11-2019 - |
Question
J'expérimente Pyclips Et je veux l'intégrer étroitement avec Python, de sorte que lorsqu'une règle est activée, elle appelle une fonction Python.
Voici ce que j'ai jusqu'à présent:
import clips
def addf(a, b):
return a + b
clips.RegisterPythonFunction(addf)
clips.Build("""
(defrule duck
(animal-is duck)
=>
(assert (sound-is quack))
(printout t "it’s a duck" crlf))
(python-call addf 40 2 )
""")
Cependant, lorsque j'affirme le fait «Animal-Is Duck», ma fonction Python n'est pas appelée:
>>> clips.Assert("(animal-is duck)")
<Fact 'f-0': fact object at 0x7fe4cb323720>
>>> clips.Run()
0
Qu'est-ce que je fais mal?
La solution
Il y a un support mal placé qui termine la règle trop tôt en laissant de côté le python-call
:
clips.Build("""
(defrule duck
(animal-is duck)
=>
(assert (sound-is quack))
(printout t "it's a duck" crlf))
(python-call addf 40 2 ) ^
""") ^ |
| this one
|
should go here
Si vous voulez vérifier que le addf
En fait retourné 42, le résultat pourrait être emballé et imprimé:
clips.Build("""
(defrule duck
(animal-is duck)
=>
(assert (sound-is quack))
(printout t \"it's a duck\" crlf)
(bind ?tot (python-call addf 40 2 ))
(printout t ?tot crlf))
""")
clips.Assert("(animal-is duck)")
clips.Run()
t = clips.StdoutStream.Read()
print t
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow