Une bibliothèque appelée clara-rules a soudainement été évoquée en moi, alors je l'ai résumée rapidement.
--Une bibliothèque qui fournit une implémentation du moteur de règles
--L'origine du système expert «C'était populaire pendant un certain temps car il était intéressant que les utilisateurs professionnels puissent résoudre des problèmes sans passer par un programmeur quand il n'y avait pas assez de programmeurs, mais il y avait une limite. --clara-rules cible les programmeurs, pas les utilisateurs professionnels, du point de vue que pratiquement toute règle est du code.
session --Représenter l'état --Insérer / retirer pour ajouter ou supprimer des faits --Le fait est représenté par une instance de l'enregistrement Clojure
defrule
--Macro pour écrire des règles
--Il y a un côté droit et un côté gauche
--Séparé par =>
Exemple simple
(defrecord Num [number])
(defrule is-two
[Num (= number 2)] => (println "Two!"))
(-> (mk-session)
(insert (Num 4)))
(fire-rules))
;;Two!
――Bien que ce ne soit pas spécifié, je pense qu'il y a quelque chose que je veux faire d'abord appelé clara-rules, et j'ai choisi Clojure pour son implémentation. «Je ne sais pas à quel point je suis heureux avec juste un exemple simple, donc j'ai encore besoin d'apprendre. --Il semble que JavaScript ait des nools et Ruby a wongi. «J'ai estimé que la génération dynamique de règles n'était pas prise en charge. --Dans defrule, je me demandais si je pourrais utiliser la méthode de protocole du type sur le côté gauche, mais l'auteur m'a dit que c'est possible avec slack.
Thanks for the clarification ryanbrush!
(defprotocol IFoo
(test-foo [this]))
(deftype Foo []
IFoo
(test-foo [this] true))
(defrule is-foo
[Foo (test-foo this;;Cela ressemble à un symbole qui est automatiquement lié dans la portée
)]
=> (println "is a foo"))
(-> (mk-session)
(insert (Foo.))
(fire-rules))
;;is a foo
Recommended Posts