introduzione a jess - unibg · b1 jess paolo salvaneschi 1 b1_2 v1.3 introduzione a jess...
TRANSCRIPT
![Page 1: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/1.jpg)
B1 JESS Paolo Salvaneschi 1
B1_2 V1.3
Introduzione a JESS
Intelligenza Artificiale
Paolo Salvaneschi
Università di BergamoFacoltà di Ingegneria
Il contenuto del documento è liberamente utilizzabile dagli studenti, per studio personale e per supporto a lezioni universitarie.Ogni altro uso è riservato, e deve essere preventivamente autorizzato dall’ autore.
Sono graditi commenti o suggerimenti per il miglioramento del materiale
![Page 2: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/2.jpg)
B1 JESS Paolo Salvaneschi 2B1 JESS Paolo Salvaneschi 2
• Caratteristiche generali• Il linguaggio Jess: elementi di base• Liste• Funzioni• Variabili• Funzioni e liste• Strutture di controllo• Definire una funzione
INDICE
![Page 3: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/3.jpg)
B1 JESS Paolo Salvaneschi 3B1 JESS Paolo Salvaneschi 3
• Fatti• Regole• Patterns• Conditional elements (CE)• Strategia• Gestione dell’agenda• Moduli
INDICE
![Page 4: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/4.jpg)
B1 JESS Paolo Salvaneschi 4B1 JESS Paolo Salvaneschi 4
• Sistema a regole implementato in Java• Realizzato da
Ernest J. Friedman-HillDistributed Computing SystemsSandia National LaboratoriesLivermore, CA - USA
• Disponibile presso:http://herzberg.ca.sandia.gov/jess
• Licenza gratuita (incluso il sorgente)per usi non-commerciali
Caratteristiche generali
![Page 5: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/5.jpg)
B1 JESS Paolo Salvaneschi 5B1 JESS Paolo Salvaneschi 5
• Bibliografia:
– Ernest J. Friedman-HillJESS IN ACTIONManning, 2003
– Documentazione scaricabile associata al prodotto
Caratteristiche generali
![Page 6: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/6.jpg)
B1 JESS Paolo Salvaneschi 6B1 JESS Paolo Salvaneschi 6
• Il sistema Jess si attiva da linea di comandoC:\> java jess.MainJess>
• O da fileC:\> java jess.Main [nome file]
Caratteristiche generali
![Page 7: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/7.jpg)
B1 JESS Paolo Salvaneschi 7B1 JESS Paolo Salvaneschi 7
• Puzzle– A foursome of golfers is standing at a tee, in a line from
left to right. Each golfer wears different colored pants; one is wearing red paints;
– The golfer to Fred's right is wearing blue pants;– Joe is in second in line;– Bob is wearing the plaid pants;– Tom isn't in position 1 or 4 and isn't wearing orange pants
• In what order will the four golfers tee off, and what color are each golfer’s pants?
Caratteristiche generali
tee -- supporto su cui appoggia la palla da golfto tee off -- dare la mazzata iniziale
![Page 8: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/8.jpg)
B1 JESS Paolo Salvaneschi 8B1 JESS Paolo Salvaneschi 8
• Approccio:– Rappresento le possibili combinazioni di nomi,
posizioni e colori– Scrivo la regola che descrive il problema– Attivo il motore di Jess per trovare la soluzione.
Caratteristiche generali
Fred ?p1 ?c1Joe ?p2 ?c2Bob ?p3 ?c3Tom ?p4 ?c4
name position color
1 2 3 4 red blue plaid orange
![Page 9: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/9.jpg)
B1 JESS Paolo Salvaneschi 9B1 JESS Paolo Salvaneschi 9
(deftemplate pants-color (slot of) (slot is))(deftemplate position (slot of) (slot is))
Caratteristiche generali
Es_1
Definisco la struttura dei fattiche inserirò nella working memory
Fatti del tipo: (pants-color (of Bob)(is plaid))
Ordered facts
![Page 10: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/10.jpg)
B1 JESS Paolo Salvaneschi 10B1 JESS Paolo Salvaneschi 10
(deftemplate pants-color (slot of) (slot is))(deftemplate position (slot of) (slot is))
(defrule generate-possibilities=>(foreach ?name (create$ Fred Joe Bob Tom)
(foreach ?color (create$ red blue plaid orange)(assert (pants-color (of ?name)
(is ?color))))(foreach ?position (create$ 1 2 3 4)
(assert (position (of ?name)(is ?position))))))
Caratteristiche generali
![Page 11: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/11.jpg)
B1 JESS Paolo Salvaneschi 11B1 JESS Paolo Salvaneschi 11
Caratteristiche generali
Carico i fatti nella working memory
16 fatti del tipo: (pants-color (of Bob)(is plaid))
e16 fatti del tipo: (position (of Joe)(is 3))
![Page 12: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/12.jpg)
B1 JESS Paolo Salvaneschi 12B1 JESS Paolo Salvaneschi 12
(defrule find-solution;; The golfer to Fred's right is wearing blue pants.(position (of Fred) (is ?p1))(pants-color (of Fred) (is ?c1))
(position (of ?n&~Fred) (is ?p&:(eq ?p (+ ?p1 1))))(pants-color (of ?n&~Fred) (is blue&~?c1))
;; Joe is in position #2(position (of Joe) (is ?p2&2&~?p1))(pants-color (of Joe) (is ?c2&~?c1))
;; Bob is wearing the plaid pants(position (of Bob) (is ?p3&~?p1&~?p&~?p2))(pants-color (of Bob&~?n) (is plaid&?c3&~?c1&~?c2))
………………………
Caratteristiche generali
NB (a ?X&:(> ?X 10)matches "a" facts with one field, a number greater than 10
Regola
Each golfer wears different colored pants
Each golfer is in a different position
![Page 13: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/13.jpg)
B1 JESS Paolo Salvaneschi 13B1 JESS Paolo Salvaneschi 13
………………………
;; Tom isn't in position 1 or 4 and isn't wearing orange
(position (of Tom&~?n)(is ~1&~4&?p4&~?p1&~?p2&~?p3))(pants-color (of Tom)(is ?c4&~orange&~blue&~?c1&~?c2&~?c3))=>(printout t Fred " " ?p1 " " ?c1 crlf)(printout t Joe " " ?p2 " " ?c2 crlf)(printout t Bob " " ?p3 " " ?c3 crlf)(printout t Tom " " ?p4 " " ?c4 crlf))
(reset)(run)
Caratteristiche generali
![Page 14: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/14.jpg)
B1 JESS Paolo Salvaneschi 14B1 JESS Paolo Salvaneschi 14
;; The golfer to Fred's right is wearing blue pants.(position (of Fred) (is ?p1))(pants-color (of Fred) (is ?c1))
(position (of ?n&~Fred) (is ?p&:(eq ?p (+ ?p1 1))))(pants-color (of ?n&~Fred) (is blue&~?c1))
Caratteristiche generali
Each golfer wears different colored pants
The pant’s color of the golfer to Fred's right is blueand is not the pant’s color of Fred
commento
![Page 15: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/15.jpg)
B1 JESS Paolo Salvaneschi 15B1 JESS Paolo Salvaneschi 15
;; Joe is in position #2(position (of Joe) (is ?p2&2&~?p1))(pants-color (of Joe) (is ?c2&~?c1))
………………………
Caratteristiche generali
commento
Each golfer is in a different position
Joe is in position 2 and is not the position of Fred (?p1)
![Page 16: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/16.jpg)
B1 JESS Paolo Salvaneschi 16B1 JESS Paolo Salvaneschi 16
;; Bob is wearing the plaid pants(position (of Bob) (is ?p3&~?p1&~?p&~?p2))(pants-color (of Bob&~?n) (is plaid&?c3&~?c1&~?c2))
Caratteristiche generali
commento
Joe is in position ?p3And is not in the position of Fred (?p1)And is not in the position of Joe (?p2)And is not in the position of “the golfer to Fred's right” (?p)because “the golfer to Fred's right” is wearing blue pants, while Bob iswearing plaid pants
![Page 17: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/17.jpg)
B1 JESS Paolo Salvaneschi 17B1 JESS Paolo Salvaneschi 17
Caratteristiche generali
• Risultato:
![Page 18: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/18.jpg)
B1 JESS Paolo Salvaneschi 18B1 JESS Paolo Salvaneschi 18
• Modifica: elimino parte della conoscenza;; Joe is in position #2
(position (of Joe) (is ?p2&2&~?p1))(pants-color (of Joe) (is ?c2&~?c1))
;; We don't know anything about Joe, really(position (of Joe) (is ?p2&~?p1))(pants-color (of Joe) (is ?c2&~?c1))
Es_2
Caratteristiche generali
![Page 19: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/19.jpg)
B1 JESS Paolo Salvaneschi 19B1 JESS Paolo Salvaneschi 19
C:\> java jess.Main C:\Programmi\Jess61p4\appoggio\es_2.clpJess, the Java Expert System ShellCopyright (C) 2001 E.J. Friedman Hill and the Sandia CorporationJess Version 6.1p4 7/8/2003
Fred 2 orangeJoe 4 blueBob 1 plaidTom 3 red
Fred 2 orangeJoe 1 blueBob 4 plaidTom 3 red
Fred 1 orangeJoe 2 blueBob 4 plaidTom 3 red
Fred 3 orangeJoe 4 blueBob 1 plaidTom 2 red
Fred 1 orangeJoe 4 blueBob 3 plaidTom 2 red
Fred 1 orangeJoe 3 blueBob 4 plaidTom 2 redJess>
• Risultato:
Caratteristiche generali
![Page 20: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/20.jpg)
B1 JESS Paolo Salvaneschi 20B1 JESS Paolo Salvaneschi 20
• Sono generate tutte le possibili soluzioni
• Il sistema degrada le proprie prestazioni in presenza di informazione incompleta; non fallisce
Caratteristiche generali
![Page 21: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/21.jpg)
B1 JESS Paolo Salvaneschi 21B1 JESS Paolo Salvaneschi 21
• Puzzles?– Regole di Business (costruzione di una proposta
contrattuale, fatturazione,…)– Configurazione di prodotto– Interpretazione di dati e generazione di allarmi– ………………….
Caratteristiche generali
![Page 22: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/22.jpg)
B1 JESS Paolo Salvaneschi 22B1 JESS Paolo Salvaneschi 22
Il linguaggio Jess: elementi di base
• Whitespace e Newline– non sono significativi se non tra " "
• Tokens: simboli, numeri, stringhe , commenti• Simboli
– Un simbolo contiene lettere, numeri e$ * . = + / < > _ ? #
– Non può iniziare con un numero– Case sensitive– Nil FALSE TRUE
![Page 23: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/23.jpg)
B1 JESS Paolo Salvaneschi 23B1 JESS Paolo Salvaneschi 23
Il linguaggio Jess: elementi di base
• Numeri – Integer, Float, Long 2, -4, 3.1415, 6.0E4
Float = double float JavaLong = long integer Java
• Stringhe– "Hello, World"
– \" Per inserire il simbolo ": "\"Nonsense,\" he said firmly."
– no "escape sequences" (es: non si può inserire newline in una stringa usando "\n")
– Newline inserito in una stringa è parte della stringa"Hello,There"
![Page 24: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/24.jpg)
B1 JESS Paolo Salvaneschi 24B1 JESS Paolo Salvaneschi 24
Il linguaggio Jess: elementi di base
• Commenti– Iniziano con ";"– Fino alla fine della riga di testo– Possono apparire ovunque
; This is a list(a b c)
![Page 25: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/25.jpg)
B1 JESS Paolo Salvaneschi 25B1 JESS Paolo Salvaneschi 25
Liste
• Liste (struttura di base di Jess)– Zero o più tokens (o liste) tra parentesi
(+ 3 2)(a b c)("Hello, World")()(deftemplate person (slot name))
Primo elemento:list’s head
![Page 26: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/26.jpg)
B1 JESS Paolo Salvaneschi 26B1 JESS Paolo Salvaneschi 26
Funzioni
• Funzioni– Tutto il codice in Jess (strutture di controllo,
assegnamenti, chiamate a procedure) prende la forma di chiamata a funzione
– Una chiamata a funzione è una lista– Se la testa della lista è il nome di una funzione
esistente, la lista è una chiamata a funzione– Notazione prefissa– built-in functions (math, program control, string
manipulations, access to Java APIs)
![Page 27: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/27.jpg)
B1 JESS Paolo Salvaneschi 27B1 JESS Paolo Salvaneschi 27
Funzioni
Jess> (+ 3 7)10Jess>
Jess> ( + ( * 25 4 ) (- 20 5 ) )115Jess>
Nome funzione matematica predefinita
![Page 28: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/28.jpg)
B1 JESS Paolo Salvaneschi 28B1 JESS Paolo Salvaneschi 28
Funzioni
Jess> (printout t "The answer is 42 !" crlf)The answer is 42 !Jess>
Jess> (batchC:/Programmi/Jess61p4/examples/hello.clp)
Hello, world!Jess>
Nome funzione i/o predefinita
Valuta un file di codice Jess
Console Simbolo speciale: stampa newline
![Page 29: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/29.jpg)
B1 JESS Paolo Salvaneschi 29B1 JESS Paolo Salvaneschi 29
Funzioni
(printout t Fred Joe Bob Tom crlf)(printout t "Fred Joe Bob Tom" crlf)(printout t Fred " " Joe " " Bob " " Tom crlf)(reset)
(run)Jess> ( batchappoggio/es_2a.clp )
FredJoeBobTom
Fred Joe Bob Tom
Fred Joe Bob Tom
Jess>
Es_2a
Simboli e stringhe
![Page 30: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/30.jpg)
B1 JESS Paolo Salvaneschi 30B1 JESS Paolo Salvaneschi 30
Funzioni
Jess> (bind ?x TRUE)TRUEJess> (bind ?y FALSE)FALSEJess> ?xTRUEJess> ?yFALSE
Nome funzione logica predefinita
Jess> (and ?x ?y)FALSEJess> (or ?x ?y)TRUEJess> (and ?x not?y)TRUEJess>
Il risultato della valutazione della funzione. Tutte le funzioni Jessrestituiscono un risultato
![Page 31: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/31.jpg)
B1 JESS Paolo Salvaneschi 31B1 JESS Paolo Salvaneschi 31
Variabili
• Variabili– Contenitori dotati di nome che contengono un
valore– Untyped– Iniziano con "? " ?a ?p1– Non devono essere dichiarate. Sono create quando
si assegna per la prima volta un valore
![Page 32: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/32.jpg)
B1 JESS Paolo Salvaneschi 32B1 JESS Paolo Salvaneschi 32
Variabili
– Assegnare un valore a una variabile:Jess> (bind ?x "The value")"The value"Jess>
– Utilizzare:Jess> (bind ?a1 7)7Jess> (+ ?a1 3)10Jess>
![Page 33: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/33.jpg)
B1 JESS Paolo Salvaneschi 33B1 JESS Paolo Salvaneschi 33
Variabili
;; Variabili, valori e funzioni predefinite
(bind ?x TRUE)(bind ?y FALSE)(printout t " x=" ?x " y=" ?y crlf crlf)
(bind ?res (and ?x ?y))(printout t " x AND y = " ?res crlf)
(bind ?res (or ?x ?y))(printout t " x OR y = " ?res crlf)
(bind ?res (and ?x not?y))(printout t " x AND NOTy = " ?res crlf)
Es_3
![Page 34: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/34.jpg)
B1 JESS Paolo Salvaneschi 34B1 JESS Paolo Salvaneschi 34
Variabili
C:\Programmi\Jess61p4>java jess.ConsoleEs_3
![Page 35: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/35.jpg)
B1 JESS Paolo Salvaneschi 35B1 JESS Paolo Salvaneschi 35
Variabili
• Variabili multifield$?y– Normali variabili con significato speciale solo nel
contesto di• Deffunctions(deffunction max ($?args)………
Numero variabile di argomenti della funzione
• Parte LHS di regole (per eseguire il match di una variabile con più valori)
![Page 36: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/36.jpg)
B1 JESS Paolo Salvaneschi 36B1 JESS Paolo Salvaneschi 36
Variabili
• Variabili globali• Ogni variabile è distrutta dal comando
(reset)– inizializza la working memory
• Per creare variabili persistenti:?*nome_var_globale*?no-globale
(defglobal ?*x* = 3)
![Page 37: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/37.jpg)
B1 JESS Paolo Salvaneschi 37B1 JESS Paolo Salvaneschi 37
Variabili
(defglobal ?*x* = 3)
• Quando è creata è inizializzata al valore dato• Dipendentemente dalla proprietà reset-globals
è reinizializzata o no con il comando (reset)
![Page 38: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/38.jpg)
B1 JESS Paolo Salvaneschi 38B1 JESS Paolo Salvaneschi 38
Variabili
Jess> (get-reset-globals)TRUEJess> (defglobal ?*x* = 3)TRUEJess> ?*x*3Jess> (bind ?*x* 4)4Jess> (reset); reset ?*x* to its initial value of 3TRUEJess> ?*x*3Jess> (bind ?*x* 4)4Jess> (set-reset-globals FALSE)FALSEJess> (reset)TRUEJess> ?*x*4Jess>
Funzioni di gestione di reset-globals
(default TRUE)
![Page 39: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/39.jpg)
B1 JESS Paolo Salvaneschi 39B1 JESS Paolo Salvaneschi 39
• Jess assume che una lista è una chiamata a funzione• Per costruire liste di dati (plain list) : create$
Jess> (bind ?grocery-list (create$ eggs bread milk))(eggs bread milk)
Jess>
Funzioni e liste
![Page 40: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/40.jpg)
B1 JESS Paolo Salvaneschi 40B1 JESS Paolo Salvaneschi 40
Jess> (first$ ?grocery-list)(eggs)Jess> Jess> (rest$ ?grocery-list)(bread milk)Jess> Jess> (nth$ 1 ?grocery-list)eggsJess>(bind ?more-groceries (create$ ?grocery-list salt soap))
(eggs bread milk salt soap)Jess>
Funzioni e liste
La lista inizia da 1
Le liste non sono annidate (plain list)
![Page 41: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/41.jpg)
B1 JESS Paolo Salvaneschi 41B1 JESS Paolo Salvaneschi 41
• Strutture di controllo(foreach <variable> <list> <expression>+)valuta un’espressione per ogni elemento di una lista
Jess> (bind ?grocery-list (create$ eggs bread milk))(eggs bread milk)Jess> (foreach ?e ?grocery-list (printout t ?e crlf))eggsbreadmilkJess>
Strutture di controllo
Uno o più
![Page 42: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/42.jpg)
B1 JESS Paolo Salvaneschi 42B1 JESS Paolo Salvaneschi 42
(foreach <variable> <list> <expression>+)
(foreach ?name (create$ Fred Joe Bob Tom)
(foreach ?color (create$ red blue plaid orange) (assert (pants-color (of ?name)(is ?color))))
(foreach ?position (create$ 1 2 3 4)(assert (position (of ?name)(is ?position))))
)
Strutture di controllo
![Page 43: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/43.jpg)
B1 JESS Paolo Salvaneschi 43B1 JESS Paolo Salvaneschi 43
• Strutture di controllo(while <Boolean expression> do <expression>+)Jess> (batch appoggio/es_4.clp)somma=55
Jess>
Strutture di controllo
;;;; Somma i numeri da 1 a 10;;(bind ?i 1)(bind ?sum 0)
(while (<= ?i 10) do (bind ?sum (+ ?sum ?i)) (bind ?i (+ ?i 1)))
(printout t " somma=" ?sum crlf)Es_4
![Page 44: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/44.jpg)
B1 JESS Paolo Salvaneschi 44B1 JESS Paolo Salvaneschi 44
• Strutture di controllo(if <Boolean expression> then <expression>+ [else
<expression>+ ])Jess> (batch appoggio/es_5.clp)I need to buy eggsJess>
Strutture di controllo
;;;; Esercizio IF;;(bind ?grocery-list (create$ eggs bread milk))
(if (member$ eggs ?grocery-list) then
(printout t " I need to buy eggs" crlf)else
(printout t " No eggs" crlf))
E’ un elemento della lista
opzionale
Es_5
![Page 45: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/45.jpg)
B1 JESS Paolo Salvaneschi 45B1 JESS Paolo Salvaneschi 45
• Definire una funzione(deffunction <name> (<parameter>*) [<comment>]
<expression>*)
Definire una funzione
Zero o più
Jess> ( batch appoggio/es_6.clp )x? = 5y? = 12The greater of x and y is 12Jess>
Es_6
![Page 46: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/46.jpg)
B1 JESS Paolo Salvaneschi 46B1 JESS Paolo Salvaneschi 46
Definire una funzione
;;;; Esercizio deffunction;;(deffunction max (?a ?b)
(if (> ?a ?b) then(return ?a)
else(return ?b)))
(printout t "x? = " )(bind ?x (read t)) (printout t "y? = " )(bind ?y (read t))
(printout t "The greater of x and y is " (max ?x ?y) crlf)
(deffunction <name> (<parameter>*) [<comment>] <expression>*)
![Page 47: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/47.jpg)
B1 JESS Paolo Salvaneschi 47B1 JESS Paolo Salvaneschi 47
Fatti
• Fatti
Workingmemory(shopping-list eggs milk bread)
(person "Bob Smith" Male 35)
(father-of danielle fred)
(temperature floor1 18.5)
![Page 48: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/48.jpg)
B1 JESS Paolo Salvaneschi 48B1 JESS Paolo Salvaneschi 48
• Definire un fatto (assert)(assert (temperature floor1 18.5))
• (facts) elenca tutti i fatti nella working memoryJess> (assert (temperature floor1 18.5)) <Fact-0>Jess> (facts)f-0 (MAIN::temperature floor1 18.5)For a total of 1 facts.Jess>
Fact Id
Fatti
Ad ogni fatto è associato un numero identificativo univoco a partire da 0
![Page 49: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/49.jpg)
B1 JESS Paolo Salvaneschi 49B1 JESS Paolo Salvaneschi 49
• (watch facts) visualizza i cambiamenti nella working memoryJess> (assert (temperature floor1 18.5))
<Fact-0>Jess> (facts)f-0 (MAIN::temperature floor1 18.5)For a total of 1 facts.Jess>
Jess> (watch facts)TRUEJess> (assert (temperature floor2 21)) ==> f-1 (MAIN::temperature floor2 21)<Fact-1>Jess>
Fatti
==>Ho inserito un nuovo fatto
![Page 50: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/50.jpg)
B1 JESS Paolo Salvaneschi 50B1 JESS Paolo Salvaneschi 50
• Rimuovere un fatto (retract)Jess> (facts)f-0 (MAIN::temperature floor1 18.5)f-1 (MAIN::temperature floor2 21)For a total of 2 facts.Jess> (retract 1)<== f-1 (MAIN::temperature floor2 21)
TRUEJess>
Fatti
<==Ho eliminato un fatto
Fact id
![Page 51: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/51.jpg)
B1 JESS Paolo Salvaneschi 51B1 JESS Paolo Salvaneschi 51
• Rimuovere un fatto (retract)Jess> (bind ?id (assert (temperature floor3 30)) )==> f-3 (MAIN::temperature floor3 30)<Fact-3>Jess> (facts)f-0 (MAIN::temperature floor1 18.5)f-2 (MAIN::temperature floor2 21)f-3 (MAIN::temperature floor3 30)For a total of 3 facts.Jess> (retract ?id)<== f-3 (MAIN::temperature floor3 30)TRUEJess> (facts)f-0 (MAIN::temperature floor1 18.5)f-2 (MAIN::temperature floor2 21)For a total of 2 facts.
Jess>
Fatti
La variabile contiene il Fact id
![Page 52: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/52.jpg)
B1 JESS Paolo Salvaneschi 52B1 JESS Paolo Salvaneschi 52
• (clear)– Inizializza Jess– rimuove tutti i fatti dalla working memory– cancella variabili, regole, deffunctions
• (reset)– Elimina i fatti dalla working memory– Elimina le attivazioni dall’agenda– Asserisce il fatto iniziale (initial-fact)– Ricarica i deffacts (stato iniziale)– Inizializza le variabili globali se(set-reset-globals TRUE)
Fatti
![Page 53: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/53.jpg)
B1 JESS Paolo Salvaneschi 53B1 JESS Paolo Salvaneschi 53
• (run)– Avviamento del motore
• (exit)– fine
Fatti
![Page 54: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/54.jpg)
B1 JESS Paolo Salvaneschi 54B1 JESS Paolo Salvaneschi 54
• (deffacts) lista di fatti con nomeJess> (deffacts catalog "Product catalog"(product 344 mouse "$3")(product 345 red-pen "$0.5")(product 346 blue-pen "$0.6"))TRUEJess> (reset)==> f-0 (MAIN::initial-fact)==> f-1 (MAIN::product 344 mouse "$3")==> f-2 (MAIN::product 345 red-pen "$0.5")==> f-3 (MAIN::product 346 blue-pen "$0.6")TRUEJess> (facts)f-0 (MAIN::initial-fact)f-1 (MAIN::product 344 mouse "$3")f-2 (MAIN::product 345 red-pen "$0.5")f-3 (MAIN::product 346 blue-pen "$0.6")For a total of 4 facts.Jess>
Fatti
I deffacts sono caricati nella working memory al comando (reset)
![Page 55: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/55.jpg)
B1 JESS Paolo Salvaneschi 55B1 JESS Paolo Salvaneschi 55
• Unordered facts– Semplice lista (person "Bob Smith" Male 35)
(assert (person "Bob Smith" Male 35))
• Ordered facts– Una riga di dati con colonne dotate di nome (slot)– deftemplate per definire la struttura del fatto – assert per caricare i singoli fatti della struttura
definita
Fatti
![Page 56: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/56.jpg)
B1 JESS Paolo Salvaneschi 56B1 JESS Paolo Salvaneschi 56
• Ordered facts(deftemplate product "Product catalog"(slot code)(slot description)(slot price))(assert (product (code 345) (description red-pen) (price "$0.5")))(assert (product (code 346) (description mouse) (price "$3")))
Fatti
Jess> ( batch appoggio/es_7.clp )
Jess> (facts)
f-0 (MAIN::product (code 345) (description red-pen) (price "$0.5"))
f-1 (MAIN::product (code 346) (description mouse) (price "$3"))
For a total of 2 facts.
Jess>
es_7.clp Es_7
Testo descrittivo opzionale
![Page 57: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/57.jpg)
B1 JESS Paolo Salvaneschi 57B1 JESS Paolo Salvaneschi 57
• Default slots(deftemplate product "Product catalog"(slot code (default "to_be_defined"))(slot description)(slot price))
(assert (product (code 346) (description mouse) (price "$3")))(assert (product (description red-pen) (price "$0.5")))(assert (product (description blue-pen)))
Fatti
Jess> ( batch appoggio/es_8.clp )
Jess> (facts)
f-0 (MAIN::product (code 346) (description mouse) (price "$3"))
f-1 (MAIN::product (code "to_be_defined") (description red-pen) (price "$0.5"))
f-2 (MAIN::product (code "to_be_defined") (description blue-pen) (price nil))
For a total of 3 facts.
Jess>
es_8.clp Es_8
![Page 58: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/58.jpg)
B1 JESS Paolo Salvaneschi 58B1 JESS Paolo Salvaneschi 58
Regole
• Regole (defrule)
Jess>(defrule do-change-baby"If baby is wet, change baby's diaper."(baby-is-wet) => (change-baby)) LHS pattern
RHS action
The LHS of a rule (the "if" part) consists of patterns that match facts, NOT function calls. The actions of a rule (the "then" clause) are made up of function calls.
RulesKB
![Page 59: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/59.jpg)
B1 JESS Paolo Salvaneschi 59B1 JESS Paolo Salvaneschi 59
Regole
• Regole (defrule)Jess> (defrule wrong-rule
(eq 1 1) => (printout t "Just as I thought, 1 == 1!" crlf))
LHS pattern
This rule will NOT fire just because the function call (eq 1 1) wouldevaluate to true. Instead, Jess will try to find a fact on the knowledgebase that looks like (eq 1 1). Unless you have previously asserted sucha fact, this rule will NOT be activated and will not fire.
![Page 60: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/60.jpg)
B1 JESS Paolo Salvaneschi 60B1 JESS Paolo Salvaneschi 60
Regole
Esempio completo;; Esercizio 1 regola
(deffunction change-baby ()(printout t "Baby is now dry" crlf))
(defrule do-change-baby(baby-is-wet)=>(change-baby))
(assert (baby-is-wet))
(run)
Jess> (reset)
TRUE
Jess> (watch rules)
TRUE
Jess> (batch appoggio/es_9.clp)
FIRE 1 MAIN::do-change-baby f-0
Baby is now dry
1
Jess>
Es_9
Accende la regola
![Page 61: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/61.jpg)
B1 JESS Paolo Salvaneschi 61B1 JESS Paolo Salvaneschi 61
Regole
;; Esercizio parentela 1;;(assert (femmina Amelia))(assert (femmina Alba))(assert (madre Alba Paola))(assert (madre Amelia Paola)(padre Alba Mario))(assert (padre Amelia Mario))(defrule sorella
(padre ?x ?p)(padre ?y ?p)(madre ?x ?m)(madre ?y ?m)(femmina ?x)
=>(assert (sorella ?x ?y))
(printout t ?x " sorella di " ?y crlf))
(run)
Es_10
![Page 62: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/62.jpg)
B1 JESS Paolo Salvaneschi 62B1 JESS Paolo Salvaneschi 62
Jess> (reset)TRUEJess> (facts)f-0 (MAIN::initial-fact)For a total of 1 facts.Jess> (batch appoggio/es_10.clp)Amelia sorella di AmeliaAlba sorella di AmeliaAmelia sorella di AlbaAlba sorella di Alba4……………………
……………………Jess> (facts)f-0 (MAIN::initial-fact)f-1 (MAIN::femmina Amelia)f-2 (MAIN::femmina Alba)f-3 (MAIN::madre Alba Paola)f-4 (MAIN::madre Amelia Paola)f-5 (MAIN::padre Alba Mario)f-6 (MAIN::padre Amelia Mario)
f-7 (MAIN::sorella Amelia Amelia)f-8 (MAIN::sorella Alba Amelia)f-9 (MAIN::sorella Amelia Alba)f-10 (MAIN::sorella Alba Alba)For a total of 11 facts.Jess>
Regole
![Page 63: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/63.jpg)
B1 JESS Paolo Salvaneschi 63B1 JESS Paolo Salvaneschi 63
Regole
;; Esercizio parentela 2;;(assert (femmina Amelia))(assert (femmina Alba))(assert (madre Alba Paola))(assert (madre Amelia Paola)(padre Alba Mario))(assert (padre Amelia Mario))(defrule sorella
(padre ?x ?p)(padre ?y ?p)(madre ?x ?m)(madre ?y ?m)(femmina ?x)(not (test (eq ?x ?y)))
=>(assert (sorella ?x ?y))
(printout t ?x " sorella di " ?y crlf))
(run)
Es_11
![Page 64: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/64.jpg)
B1 JESS Paolo Salvaneschi 64B1 JESS Paolo Salvaneschi 64
Jess> (reset)TRUEJess> (facts)f-0 (MAIN::initial-fact)For a total of 1 facts.Jess> (batch appoggio/es_8.clp)Alba sorella di AmeliaAmelia sorella di Alba2……………………
……………………Jess> (facts)f-0 (MAIN::initial-fact)f-1 (MAIN::femmina Amelia)f-2 (MAIN::femmina Alba)f-3 (MAIN::madre Alba Paola)f-4 (MAIN::madre Amelia Paola)f-5 (MAIN::padre Alba Mario)f-6 (MAIN::padre Amelia Mario)
f-7 (MAIN::sorella Alba Amelia)f-8 (MAIN::sorella Amelia Alba)For a total of 9 facts.Jess>
Regole
![Page 65: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/65.jpg)
B1 JESS Paolo Salvaneschi 65B1 JESS Paolo Salvaneschi 65
• watch / unwatch– abilita / disabilita visualizzazione cambiamenti (fatti,
attivazione regole,….)(watch facts) stampa messaggio ogni volta che un
fatto è asserito o ritratto(watch activations) …regola attivata o deattivata(watch rules)… regola accesa……………………………….(watch all)…
Regole
![Page 66: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/66.jpg)
B1 JESS Paolo Salvaneschi 66B1 JESS Paolo Salvaneschi 66
• Patterns– Si possono scrivere regole complesse di pattern
matching
Patterns
(deftemplate position (slot of) (slot is))
………………………………
(position (of ?n&~Fred) (is ?p&:(eq ?p (+ ?p1 1))))
![Page 67: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/67.jpg)
B1 JESS Paolo Salvaneschi 67B1 JESS Paolo Salvaneschi 67
• Patterns– Literal constraints. Specifica il valore di uno slot
Patterns
Jess> (watch activations)TRUEJess> (batch appoggio/es_12.clp)TRUEJess> (assert (letters b d))<Fact-0>Jess> (assert (letters b c))==>Activation: MAIN::literal-constraints:f-1<Fact-1>Jess> (run)1Jess>
(defrule literal-constraints(letters b c)=>)
Es_12
![Page 68: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/68.jpg)
B1 JESS Paolo Salvaneschi 68B1 JESS Paolo Salvaneschi 68
• Patterns– Variable constraints. Assegna valore matched a variabile
Patterns
Jess> (batch appoggio/es_13.clp)TRUEJess> (assert (b 2 4))<Fact-1>Jess> (run)0Jess> (assert (a 5 8))==> Activation: MAIN::variables : f-2<Fact-2>Jess> (run)pattern matched : a 5 81
(defrule variables(a ?x ?y)=>(printout t "pattern matched : a " ?x " " ?y crlf ))
Es_13
![Page 69: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/69.jpg)
B1 JESS Paolo Salvaneschi 69B1 JESS Paolo Salvaneschi 69
• Note– La variabile matched in LHS è disponibile in RHS
– Non si può utilizzare una variabile per eseguire il match dell’head di un fatto o del nome di uno slot
Patterns
(defrule variables(a ?x ?y)=>(printout t "pattern matched : a " ?x " " ?y crlf ))
( a ?x ?y )
![Page 70: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/70.jpg)
B1 JESS Paolo Salvaneschi 70B1 JESS Paolo Salvaneschi 70
• Note– La stessa variabile può apparire più volte nella stessa regola. Ogni
volta che la variabile è utilizzata, deve eseguire il match con lo stesso valore
Patterns
(defrule repeated-variables(a ?x)(b ?x)=>(printout t "x is : " ?x crlf ))
Es_14
![Page 71: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/71.jpg)
B1 JESS Paolo Salvaneschi 71B1 JESS Paolo Salvaneschi 71
PatternsJess> (clear)TRUEJess> (watch activations)TRUEJess> (batch appoggio/es_14.clp)TRUEJess> (deffacts repeated-variables (a 1) (a 2) (b 2) (b 3))TRUEJess> (facts)For a total of 0 facts.Jess> (reset)==> Activation: MAIN::repeated-variables : f-2, f-3TRUEJess> (facts)f-0 (MAIN::initial-fact)f-1 (MAIN::a 1)f-2 (MAIN::a 2)f-3 (MAIN::b 2)f-4 (MAIN::b 3)For a total of 5 facts.
Jess> (run)x is : 21Jess>
I deffacts sono caricati nella working memory solo al comando (reset)
Solo la coppia di fatti (a 2) (b 2) attiva LHS (?x è lo stesso) anche se es. (a 1) attiva un pattern e (b 3) l’altro separatamente
![Page 72: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/72.jpg)
B1 JESS Paolo Salvaneschi 72B1 JESS Paolo Salvaneschi 72
• Blank variables– Esegue il match senza specificare il nome di variabile
Patterns
Jess> (reset)TRUEJess> (batch appoggio/es_15.clp)TRUEJess> (assert (letters b gg fff k))<Fact-1>Jess> (run)OK1
(defrule blank-variables(letters b ? ? k)=>(printout t "OK" crlf ))
Es_15
Jess> (reset)TRUEJess> (batch appoggio/es_15.clp)TRUEJess> (assert (letters b gg fff j))<Fact-1>Jess> (run)0Jess>
![Page 73: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/73.jpg)
B1 JESS Paolo Salvaneschi 73B1 JESS Paolo Salvaneschi 73
• Patterns– Connective constraints. Condizioni and, or, not
Patterns
Jess> ( batch appoggio/es_16.clp )Order accepted1Jess>
(defrule example-3(code ?n1&~special-client)(items-purchased ?d1 ?d2&~?d1)(city Milan|Paris)=>(printout t "Order accepted" crlf))
(assert (code normal-client))(assert (items-purchased dvd mouse))(assert (city Milan))
(run)
Es_16
![Page 74: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/74.jpg)
B1 JESS Paolo Salvaneschi 74B1 JESS Paolo Salvaneschi 74
• Note– Ordine di precedenza degli operatori: ~ & |– ~ è applicato al vincolo immediatamente successivo– Non si possono usare parentesi per cambiare la precedenza
Patterns
![Page 75: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/75.jpg)
B1 JESS Paolo Salvaneschi 75B1 JESS Paolo Salvaneschi 75
• Patterns– Predicate constraints. Chiama una funzione per testare il match
Patterns
Jess> ( batch appoggio/es_17.clp ) Order accepted1Jess>
(defrule example-3(code ?n1&~special-client)(items-purchased ?d1 ?d2&~?d1)(city Milan|Paris)(total-amount ?m&:(and (> ?m 100) (< ?m 1000)))=>(printout t "Order accepted" crlf))
(assert (code normal-client))(assert (items-purchased dvd mouse))(assert (city Milan))(assert (total-amount 120))(run)
Es_17
![Page 76: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/76.jpg)
B1 JESS Paolo Salvaneschi 76B1 JESS Paolo Salvaneschi 76
• Pattern bindings– Per utilizzare retract, modify, duplicate di fatti
matched in LHS bisogna passare un puntatore agli stessi alla parte RHS
– Si utilizza una “pattern binding variable”
Patterns
![Page 77: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/77.jpg)
B1 JESS Paolo Salvaneschi 77B1 JESS Paolo Salvaneschi 77
Patterns
Es_18(deffunction change-baby () (printout t "Baby is now dry" crlf))
(defrule change-baby-if-wet?wet <- (baby-is-wet)=>(change-baby)(retract ?wet))
pattern binding variable
Quando la regola è accesa la variabile è caricata con un riferimento al fatto matched
Jess> (reset)TRUEJess> (assert (baby-is-wet))<Fact-1>Jess> (facts)f-0 (MAIN::initial-fact)f-1 (MAIN::baby-is-wet)For a total of 2 facts.Jess> ( batch appoggio/es_18.clp ) TRUEJess> (run)Baby is now dry1Jess> (facts)f-0 (MAIN::initial-fact)For a total of 1 facts.Jess>
![Page 78: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/78.jpg)
B1 JESS Paolo Salvaneschi 78B1 JESS Paolo Salvaneschi 78
• Patterns– regole complesse di pattern matching relative a fatti
individuali
• Conditional Elements (CE)– Regole che esprimono relazioni tra fatti
Conditional Elements (CE)
![Page 79: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/79.jpg)
B1 JESS Paolo Salvaneschi 79B1 JESS Paolo Salvaneschi 79
• Conditional Elements (CE)– Regole che esprimono relazioni tra fatti
Conditional Elements (CE)
(defrule example-3(code ?n1&~special-client)(city Milan|Paris)=>(printout t "Order accepted" crlf))
(defrule example-3
(and (code ?n1&~special-client)(city Milan|Paris))
=>(printout t "Order accepted" crlf))
![Page 80: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/80.jpg)
B1 JESS Paolo Salvaneschi 80B1 JESS Paolo Salvaneschi 80
• Le due regole sono equivalenti (and implicito)• Ma si può usare anche or, not
Conditional Elements (CE)
(defrule example-3(code ?n1&~special-client)(city Milan|Paris)=>(printout t "Order accepted" crlf))
(defrule example-3
(and (code ?n1&~special-client)(city Milan|Paris))
=>(printout t "Order accepted" crlf))
![Page 81: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/81.jpg)
B1 JESS Paolo Salvaneschi 81B1 JESS Paolo Salvaneschi 81
• OR
Conditional Elements (CE)
(deftemplate used-car (slot price) (slot mileage))(deftemplate new-car (slot price) (slot warrantyPeriod))
(defrule might-buy-car?candidate <- (or (used-car (mileage ?m&: (< ?m 50000)))
(new-car (price ?p&: (< ?p 20000))))=>(assert (candidate ?candidate)))
(assert (new-car (price 18000)))(assert (used-car (mileage 30000)))
(run)(facts)
Es_19
![Page 82: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/82.jpg)
B1 JESS Paolo Salvaneschi 82B1 JESS Paolo Salvaneschi 82
• OR
Conditional Elements (CE)
Jess> (reset)TRUEJess> ( batch appoggio/es_19.clp )f-0 (MAIN::initial-fact)f-1 (MAIN::new-car (price 18000) (warrantyPeriod nil))f-2 (MAIN::used-car (price nil) (mileage 30000))f-3 (MAIN::candidate <Fact-2>)f-4 (MAIN::candidate <Fact-1>)For a total of 5 facts.Jess>
La regola è istanziata e accesa due volte, una per new-car e una per used-car che attivano ognuno un ramo dell’OR
![Page 83: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/83.jpg)
B1 JESS Paolo Salvaneschi 83B1 JESS Paolo Salvaneschi 83
• NOT
Conditional Elements (CE)
(defrule no-red-cars-1(auto (color ~red))
=>)
(defrule no-red-cars-2(not (auto (color red)))
=>)
La regola è accesaquando un’auto non è di colore rosso(si accende per ogni auto blu -non rossa-)(non si accende quando non ci sono auto)
La regola è accesaquando non ci sono fatti “auto di colore rosso”(non si accende quando c’è un’auto di colore rosso)(si accende quando non ci sono auto)(si accende se ci sono solo auto blu)
![Page 84: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/84.jpg)
B1 JESS Paolo Salvaneschi 84B1 JESS Paolo Salvaneschi 84
• TEST– Un pattern con head test ha come body una
funzione booleana il cui risultato determina se il pattern esegue il match
Conditional Elements (CE)
Jess> (reset)TRUEJess> ( batchappoggio/es_20.clp )Person age is over 30!1Jess>
(deftemplate person (slot age))
(defrule test(person (age ?x))(test (> ?x 30))=>(printout t " Person age is over 30!" crlf))
(assert (person (age 45)))(run)
Es_20
![Page 85: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/85.jpg)
B1 JESS Paolo Salvaneschi 85B1 JESS Paolo Salvaneschi 85
• Motore forward chaining
• Supporta anche l’utilizzo backward chaining
Strategia
![Page 86: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/86.jpg)
B1 JESS Paolo Salvaneschi 86B1 JESS Paolo Salvaneschi 86
• Conflict resolution– (set-strategy depth) default
La regola attivata più di recente è attivata per prima
– (set-strategy breadth)
La regola attivata più di recente è attivata per ultima
– PrioritàOgni regola ha la proprietà salience
Gestione dell’agenda
![Page 87: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/87.jpg)
B1 JESS Paolo Salvaneschi 87B1 JESS Paolo Salvaneschi 87
• salience
– Le regole con salience maggiore si accendono per prime
– Default salience: 0
Gestione dell’agenda
(defrule example(declare (salience +100))…………………
![Page 88: Introduzione a JESS - Unibg · B1 JESS Paolo Salvaneschi 1 B1_2 V1.3 Introduzione a JESS Intelligenza Artificiale Paolo Salvaneschi Università di Bergamo Facoltà di Ingegneria Il](https://reader034.vdocuments.pub/reader034/viewer/2022051606/602a970e3a78340977380278/html5/thumbnails/88.jpg)
B1 JESS Paolo Salvaneschi 88B1 JESS Paolo Salvaneschi 88
• E’ possibile separare la base di regole e fatti in moduli diversi
• Un modulo definisce un namespace• Esiste un meccanismo per passare il flusso di
controllo tra moduli: focus
Moduli
Jess> (defmodule WORK)TRUE Jess> (deftemplate WORK::job (slot salary))TRUEJess> (list-deftemplates WORK)WORK::job For a total of 1 deftemplates.