(vychádza z prednášky
Funkcionálne programovanie, Ivan Kalaš)
Petrovič Pavol, Ústav Informatiky, č.d. 15
e-mail: ppetrovi@dent.ii.fmph.uniba.sk
www k prednáške: http://www.ii.fmph.uniba.sk/vyuka/lisp
6.prednáška
Model prostredí
príklad:
[] (define x 3) x [] (define y 2) y [] (let ((x *) (z 3)) (x 2 z)) 6 [] (let ((y 5) (z *)) (list x y z)) (3 5 *) [] x 3 [] y 2 [] z #<undefined>
set!
(set! <variable> <value>)
[] (define a 3) a [] a 3 [] (set! a 4) #<undefined> [] a 4
pravidlá
vyhodnocovanie S-výrazov
príklad funkcie square
[] (square 3) 9
S-výraz "(* x x)" sa vyhodnotí v prostredí env1,
príklady
[] (square-sum 2 -1) 5 poznámka: Zámerne sa vynechalo vyhodnocovanie funkcie +, kedže jej definícia nie je dostupná - tento prístup sa uplatní aj pri dalších príkladoch.
[] (fact 3) 6
nevýhoda: Premenná account je definovaná v globálnom prostredí, takže je voľne prístupná komukoľvek, čo pri bankových operáciách nie je vhodné.
[] (withdraw2 50) 950
[] (define withdraw3
(create-account1 1000))withdraw3
[] (withdraw3 50) 950
[] (define withdraw4
(create-account2 1000)withdraw4 [] (withdraw4 50) 950
Spolu s aktuálnou výškou konta je v prostredí uložená aj počiatočná výška.
[] (define account1
(create-account3 1000))account1
[] ((account1 'withdraw) 50) 950
banka6
Uvedený program (samozrejme) stále nezodpovedá požiadavkám spoľahlivého a bezpečného bankového programu.
vylepšenia:
Last Updated on 09-Nov-2000
By Petrovic Pavol
E-mail: ppetrovi@dent.ii.fmph.uniba.sk