(assert (a)) (facts) (assert (essaie "cou-cou" 1 1.1)) (facts) (reset) (clear) (assert (a)) (assert (a)) (set-fact-duplication TRUE) (assert (a)) (assert (a)) (facts) (deftemplate person ; une relation pour un person "record pour une person" ; commentaire optionnel (slot name ; nom du person (type STRING) ; Type chaine de caractères (default "Pierre Dupont")) ; Par défaut (slot age (type INTEGER) ; age est un entier (default -1)) ; si on ne sait pas ) (assert (person)) (assert (person (name "joe"))) (assert (person (name "jim") (age 39))) (facts) (list-deftemplates) (ppdeftemplate person) (undeftemplate person) ;; allowed symbols example (clear) ;; On peut limiter les valeurs possible (deftemplate person ; une relation pour un person "record pour une person" ; commentaire optionnel (slot name ; nom du person (type STRING) ; Type chaine de caractères (default "Pierre Dupont")) ; Par défaut (slot age ; masculin ou féminine (type NUMBER) ; age est un entier (default -1) ; si on ne sait pas (range -1 122)) ; declare les valeurs possible (slot metier ; sa métier (type SYMBOL) (allowed-symbols artiste ingenieur comercant) ) ) (assert (person)) ;; deffacts example (deftemplate emplacement (slot nom (type SYMBOL) (default NIL)) (slot x (type NUMBER) (default -1)) (slot y (type NUMBER)(default -1)) (multislot voisins (default NIL)) ) (deffacts reseaux-d-emplacements (emplacement (nom A) (x 0) (y 0) (voisins B C)) (emplacement (nom B) (x 0) (y 1) (voisins A D)) (emplacement (nom C) (x 1) (y 0) (voisins A I)) ) (list-deftemplates) (ppdeftemplate ) (undeftemplate ) (clear) (deffacts faits-de-nuit "Ceux-ci sont vrai le nuit" (soleil couche) (etoiles visibles) ) (reset) ;; rule examples (set-fact-duplication TRUE) (defrule eat-cookies (cookie) => (printout t "I want a cookie" crlf)) (assert (cookie)) (assert (cookie)) (facts) (clear) ;; variables d'indice (defrule rule-A ?f <- (a) => (printout t "Il Existe " ?f crlf) ) (assert (a)) (run) (defrule rule-A ?f <- (a) => (printout t "Retracting " ?f crlf) (retract ?f) ) (assert (a)) (run) (defrule rule-A-Bis ?f <- (a) => ) (deftemplate A (slot B (default 0))) (defrule rule-A ?f <- (A (B 0)) => (printout t "Changing " ?f crlf) (modify ?f (B 1)) ) (defrule rule-A-2 ?f <- (A (B 1)) => (printout t "Changing " ?f crlf) (modify ?f (B 1)) ) (assert (A)) ;;; example de variables - Variable d'attribut (clear) (assert (a b c d e f)) (assert (a b c)) (assert (b c d)) (defrule test (a ? ?) => (printout t "test est execute." crlf) ) (defrule traiter-1-sur-3 (a ?x ?) => (printout t "x = " ?x crlf) ) (defrule traiter-1-sur-3 (a ?x ?) (b ? ?x) => (printout t "x = " ?x crlf) ) (run) (defrule traiter-une-liste (a $?x) => (printout t "x = " $?x crlf) ) (run) (defrule test0 (a $? ?x) => (printout t "x = " ?x crlf) ) (run) (defrule test0 (a $? ?x) => (printout t "x = " $?x crlf) ) (run) (defrule test1 (a $?x) => (printout t "x = " $?x crlf) ) (run) (defrule test1 (a $? ?x $?) => (printout t "x = " ?x crlf) ) (run) (defrule test3 (a $?x $?) => (printout t "x = " $?x crlf) ) (run) (clear) (defrule traiter-une-liste (a $?x) => (printout t "x = " $?x crlf) ) ;; Avec deftemplate (deftemplate A (slot B (default 0))) (defrule rule-A ?f <- (A (B 0)) => (printout t "Changing " ?f crlf) (modify ?f (B 1)) ) (assert (A (B))) (assert (A (B 1))) (run) (deftemplate person ; une relation pour un person "record pour une person" ; commentaire optionnel (slot famille ; nom du person (type STRING) ; Type chaine de caractères (default " Dupont")) ; Par défaut (slot prenom ; nom du person (type STRING) ; Type chaine de caractères (default "Pierre ")) ; Par défaut ) (defrule Find-same-name ?P1 <- (person (famille ?n1) (prenom ?b)) ?P2 <- (person (famille ?n2) (prenom ?b)) => (printout t ?b " " ?n1 " et " ?b " " ?n2 " Ont le meme prenom" crlf) ) (defrule Find-same-name ?P1 <- (person (famille ?n1) (prenom ?b)) ?P2 <- (person (famille ?n2) (prenom ?b)) (test (neq ?n1 ?n2)) => (printout t ?b " " ?n1 " et " ?b " " ?n2 " Ont le meme prenom" crlf) ) (defrule Find-same-name ?P1 <- (person (famille ?n1) (prenom ?b)) ?P2 <- (person (famille ?n2) (prenom ?b)) (test (neq ?n1 ?n2)) => (printout t ?b ?n1 " et " ?b ?n2 "Ont le meme prenom" crlf) (retract ?P2) ) (assert (person (famille "dupont") (prenom "pierre"))) (assert (person (famille "durant") (prenom "pierre"))) (deftemplate person ; une relation pour un person "record pour une person" ; commentaire optionnel (slot famille ; nom du person (type STRING) ; Type chaine de caractères (default "Dupont")) ; Par défaut (slot prenom ; nom du person (type STRING) ; Type chaine de caractères (default "Pierre")) ; Par défaut ) (assert (person (famille "Dupres"))) (defrule Find-same-name ?P1 <- (person (famille ?n1) (prenom ?b)) ?P2 <- (person (famille ?n2) (prenom ?b)) => (printout t ?b " " ?n1 " et " ?b " " ?n2 " Ont le meme prenom" crlf) ) (defrule Find-same-name (person (famille ?n1) (prenom ?b)) (person (famille ?n2) (prenom ?b)) (test (neq ?n1 ?n2)) => (printout t ?b " " ?n1 " et " ?b " " ?n2 " Ont le meme prenom" crlf) ) (defrule Find-same-name ?P1 <- (person (famille ?n1) (prenom ?b)) ?P2 <- (person (famille ?n2) (prenom ?b)) (test (neq ?n1 ?n2)) => (printout t ?b ?n1 " et " ?b ?n2 " Ont le meme prenom" crlf) (retract ?P2) ) (assert (person (famille "dupont") (prenom "pierre"))) (assert (person (famille "durant") (prenom "pierre"))) (defrule test3 (couleur ?x & vert | bleu) => (assert (ok)) ) (defrule feu-rouge (couleur ?x&~vert&~jaune) => (assert (il faut arreter)) (printout t "arret" crlf) ) (defrule test3 (couleur) => (assert (ok)) ) (assert (couleur vert)) (assert (couleur rouge)) (defrule feu-rouge (couleur ?x&~vert&~jaune) => (assert (il faut arreter)) (printout t "arret" crlf) ) (defrule example-2 (data ?x&~:(symbolp ?x)) =>) (defrule example-5 (data $?x&:(> (length$ $?x) 3)) =>)