[JAVA] Le monde de Clara-Rules (3)

Dernière fois

J'ai appris de la vidéo de la conférence que les règles de clara peuvent être utilisées pour des opérations de jointure entre différentes entités, j'ai donc implémenté moi-même un exemple simple.

problème

code

(ns  clara-rules.join
  (:require [clara.rules :refer [defrule fire-rules insert insert! mk-session]]))

(defrecord TypeA [attr-a join-key])

(defrecord TypeB [attr-b join-key])

(defrecord TypeC [attr-a attr-b join-key])

(defrule Join
  [TypeA (= ?jk-a join-key) (= ?a attr-a)]
  [TypeB (= join-key ?jk-a) (= ?b attr-b)]
  =>
  (insert! (->TypeC ?a ?b ?jk-a)))

(defrule Print
  [?result <- TypeC];; Will always match
  =>
  (println ?result))

(-> (mk-session)
    (insert (->TypeA "a1" :foo)
            (->TypeA "a2" :bar)
            (->TypeA "a3" :baz)
            (->TypeB "b1" :foo)
            (->TypeB "b2" :bar)
            (->TypeB "b3" :baz)
            (->TypeB "b4" :qux))
    (fire-rules))
;;#clara_rules.join.TypeC{:attr-a a1, :attr-b b1, :join-key :foo}
;;#clara_rules.join.TypeC{:attr-a a2, :attr-b b2, :join-key :bar}
;;#clara_rules.join.TypeC{:attr-a a3, :attr-b b3, :join-key :baz}

Explication de «<-» sur le côté gauche de «défrule»

Liez le fait lui-même à une variable et non à l'attribut du fait. En prenant [? Result <-TypeC] comme exemple, la totalité de l'instance TypeC correspondante est liée à? Result.

Impressions

Suite

Recommended Posts

Le monde de Clara-Rules (2)
Le monde de Clara-Rules (4)
Le monde de Clara-Rules (1)
Le monde de Clara-Rules (3)
Le monde de Clara-Rules (5)
L'idée du tri rapide
L'idée de jQuery
Surveillance Docker-expliquant les bases des bases-
À propos de la description de Docker-compose.yml
Le jeu d'instancier java.lang.Void
Valeur médiane de trois valeurs
L'illusion de l'orientation objet
À propos du comportement de ruby Hash # ==
[Java] Supprimer les éléments de la liste
Suite: La parabole de la POO (omise)
Modifier seulement une partie du texte
Comprendre le mécanisme de base de log4j2.xml
À propos des bases du développement Android
'% 02d' Quel est le% de% 2?
[Édition Java] Histoire de la sérialisation
Vérifiez la version de Cent OS
Explication de l'ordre des itinéraires ferroviaires
J'ai lu la source de ArrayList que j'ai lu
Les bases de SpringBoot + MyBatis + MySQL
Remarque sur le chemin de request.getRequestDispatcher
Essayez HelloWorld avec la configuration minimale de Heroku Java spring-boot
J'ai lu la source d'Integer
Ceci et cela de JDK
Vérifier l'état de migration des rails
L'histoire de @ViewScoped dévore la mémoire
Filtrer les fluctuations des données brutes
Expliquer les colonnes de Spree :: Taxonomie
Un mémorandum du problème FizzBuzz
J'ai lu la source de Long
Expliquez la colonne de Spree :: Product
Diverses méthodes de la classe String
À propos du rôle de la méthode initialize
Pensez aux 7 règles d'Optionnel
Obtenez l'ID de la numérotation automatique
J'ai lu la source de Short
J'ai lu la source de Byte
Ordre de traitement dans le programme
J'ai lu la source de String
L'origine des expressions Java lambda
[Ruby] Afficher le contenu des variables
Filtrer le résultat de BindingResult [Spring]
Débogage à distance du SDK Cognos
À propos du niveau de journalisation de java.util.logging.Logger
Obtenez l'accélération et l'orientation du système de coordonnées mondial sur Android
L'histoire de la rencontre avec l'annotation personnalisée Spring
Afficher le texte en haut de l'image