Sunteți pe pagina 1din 3

Lab2_SIE TIA I

Funcţii în limbajul Jess

Funcţii built in

Limbajul Jess conţine şi funcţii care permit scrierea de programe complexe.


Ele influenţează fluxul de control, grupează instrucţiuni, iau decizii şi execută repetat
un grup de instrucţiuni. Din această categorie fac parte următoarele funcţii: if, while,
for, foreach etc.

Funcţia if permite alegerea codului care urmează a fi executat.


(if <expresie> then <actiuni_1> [else <actiuni_2>])
Primul argument al funcţiei este o expresie booleană. Dacă expresia este
adevărată, prima listă de acţiuni se evaluează şi valoarea returnată este cea oferită de
ultima acţiune din listă.
Dacă expresia este falsă, cea de-a doua listă de acţiuni se evaluează şi valoarea
returnată este cea oferită de ultima acţiune din listă.

 Să se determine folosind limbajul Jess maximul dintre două numere.


(bind ?a 20)
(bind ?b 100)
(if (> ?a ?b) then
(printout t "Maximul este primul numar care este egal cu " ?a
"." crlf)
else
(printout t "Maximul este al doilea numar care este egal cu "
?b "." crlf))

 Să se modifice programul anterior astfel încât să determine maximul dintre trei


numere preluate de la tastatură.
Observaţie: pentru a prelua date de la utilizator se foloseşte funcţia read.

 Să se creeze o listă de elemente şi să se determine dacă un element preluat de la


tastatură este element în listă.
(bind ?lista (create$ a b c d))
(printout t "Introduceti elementul: ")
(bind ?el (read))
(if (member$ ?el ?lista) then
(printout t ?el " este element in lista." crlf)
else
(printout t ?el " nu este element in lista." crlf))

Funcţia while permite evaluarea repetată a unui grup de acţiuni, cât timp o
expresie logică este adevărată.
(while <expresie> do <actiuni>)

©Ana Tănăsescu 2016 1


Lab2_SIE TIA I

Primul argument al funcţiei trebuie să fie o expresie booleană. Dacă expresia


nu este falsă, se evaluează acţiunile, procedura repetându-se până când expresia
devine falsă.

 Să se calculeze suma primelor zece numere folosind funcţia while.


(bind ?i 1)
(bind ?suma 0)
(while (<= ?i 10) do
(bind ?suma (+ ?suma ?i))
(bind ?i (+ ?i 1)))
(printout t "Suma="?suma crlf)

 Să se modifice programul anterior, astfel încât să se citească numărul de


elemente de la tastatură.

Funcţia for permite evaluarea repetată a unui grup de acţiuni de un număr


cunoscut de ori.
(for <initializare><cond><incrementare/decrementare><actiuni>)
Iniţial sunt evaluate primele două argumente. Dacă nu sunt false, se evaluează
lista de acţiuni. Apoi se evaluează incrementarea şi se reverifică condiţia, procedura
repetându-se până când condiţia se evaluează la FALSE.

 Să se rescrie programul anterior cu ajutorul funcţiei for.


(bind ?suma 0)
(for (bind ?i 1)(<= ?i 10) (bind ?i (+ ?i 1))
(bind ?suma (+ ?suma ?i)))
(printout t "Suma ="?suma crlf)

Funcţia foreach evaluează un bloc de acţiuni pentru fiecare element al unei


liste simple.
(foreach <variabila> <lista> <actiuni>)
Variabilei i se atribuie fiecare element al listei. Toate celelalte argumente sunt
evaluate în ordine pentru fiecare element al listei.

 Să se creeze o listă de numere întregi şi să se afişeze fiecare element, indicând


dacă este par sau impar.
(bind ?listanumere (create$ 18 -25 31 44 -52 63))
(foreach ?element ?listanumere
;functia oddp testeaza daca un numar este impar
(if (oddp ?element) then
(printout t ?element " este un numar impar." crlf)
else
(printout t ?element " este un numar par." crlf)))

©Ana Tănăsescu 2016 2


Lab2_SIE TIA I

 Să se creeze două liste de numere întregi şi să se afişeze elementele comune.


(bind ?lista1 (create$ 18 25 31 44 52 63))
(bind ?lista2 (create$ 18 25 33 43))
(printout t "Elementele comune sunt: " crlf)
(foreach ?e1 ?lista1
(foreach ?e2 ?lista2
(if (eq ?e1 ?e2 ) then
(printout t ?e1 crlf))))

sau

(bind ?lista1 (create$ 18 25 31 44 52 63))


(bind ?lista2 (create$ 18 25 33 43))
(printout t "Elementele comune sunt: " crlf)
;se utilizeaza functia intersection$
;care creeaza o lista cu elementele comune
(bind ?intersectie (intersection$ ?lista1 ?lista2))
(foreach ?e ?intersectie (printout t ?e crlf))

©Ana Tănăsescu 2016 3