Pràctica 6: 
"JESS : Java Expert System Shell"

 
 
 
Disseny de Sistemes de Supervisió (4t EInf)
Dept. Electrònica Informàtica i Automàtica

 
 
Objectius de la pràctica:
Exemple: 3 4. 5.643 Exemple: "Hola, mon". Exemple: (a b c), (+ 2 3), ("Hola, mon") Las funcions utilitzen una notació de prefix, és a dir que, per exemple, per a fer la suma entre dos números, s’escriurà ( + 2 3 ). Els resultats seran números sencers o flotants depenent del tipus d’argument. Les variables no poden ser declarades abans del seu primer ús, excepte per las variables globals.

Exemples: (bind ?x "El valor") (bind $?llista-compres (create$ ous pa llet))

Exemple: (temperatura 98.6)

Els fets no ordenats són una estructura. Contenen un conjunt de slots determinats els que poden ésser accedits per el seu nom.

Mentre que els fets ordenats poden utilitzar-se sense definició prèvia, els no ordenats s’han de definir emprant el constructor deftemplate.

Els fets es col·loquen en la llista de fets fent servir la funció assert y s’eliminen amb la funció retract.

( deffunction <nom-funció> [<comentari>] (<paràmetres>*)
<expr>*
[<retorn-especificador>])


On les cadenes que són dintre de < > especifiquen un tipus de data que s’ha de donar; les que són dintre de [ ] són opcionals i les que tenen * al seu costat, indiquen que poden aparèixer zero o més vegades.

El <nom-funció> ha de ser un àtom; Cada < paràmetre> ha de ser un nom de variable. La cadena opcional <comentari> és una cadena que comença i acaba per " i que descriu el propòsit de la funció. Pot haver-hi un nombre arbitrari de expressions <expr>. L’especificador opcional <retorn-especificador> dona un valor de retorn de la funció.

Exemple: (deffunction max (?a ?b)
 

( if (> ?a ?b) then
(return ?a)
else
(return ?b) ) )
( deftemplate <nom-deftemplate> [<comentari>]
[(slot <nom-slot> [(per-defecte <valor>)] [(per-defecte-dinàmico <valor>)]
[(tipus <tipus-esperat >] )]+)
El <nom-deftemplate> és el cap dels fets que es crearan utilitzant aquest deftemplate. Pot haver-hi un nombre arbitrari de slots. El <nom-slot> ha de ser un àtom. El qualificador slot per defecte declara que el valor per defecte del slot en un nou fet ve donat per <valor>.

Exemple: (deftemplate cotxes
 

"Un cotxe específic"
(slot fabricant)
(slot model)
(slot any)
(slot color (per-defecte blanc))
(deffacts <nom-deffacts>
[ <doc-comentari>]
< fet > +)
(defrule <nom-defrule>
[<doc-comentari>]
[<salience-declaration>]
[[<comparació-patrons> ¬ ] <patró>]*
Þ
<acció>*)
La regla consisteix d’una llista de patrons i una altra d’accions. Els patrons es comparen amb la llista de fets. Quan tots els fets coincideixen amb els patrons de la regla, llavors aquesta es dispara (s’executen las seves accions).

Exemple:
 

(defrule exem1ple-1
"Anunci dels fets a b c"
(a b c)
Þ
(printout t "S’ha vist el fet ‘a b c’ !" crlf))
(defglobal [<nom-variable> = <valor>] )


Exemple:
 

(defglobal ?*x* = 2)


Nota: Per a definir una variable global cal posar asteriscs abans y després del nom de la variable i també, sempre que es refereixi a la mateixa.