(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
5.prednáška
vlastnosti
(putprop <symbol> <value> <property>)
nastaví vlastnosť <property> symbolu <symbol> na hodnotu <value>(getprop <symbol> <property>)
vráti hodnotu vlastnosti <property> symbolu <symbol>, štandartne majú všetky vlastnosti hodnotu nil.
[] (putprop 'fero 10 'age) 10 [] (putprop 'fero 2500 'weight) 2500 [] (putprop 'fero 'elephant 'kind) elephant [] (getprop 'fero 'weight) 2500 [] (getprop 'fero 'address) ()
Viacnásobná reprezentácia abstraktných dát
reprezentácia komplexných čísel
x + i * y = r * cis u | ==> | x = r * cos u y = r * sin u r = sqrt(x^2 + y^2) u = atan(y/x) |
úrovne abstrakcie
program | |||
komplexné čísla | |||
+c, -c, *c, /c | |||
aritmetika komplexných čísel | |||
make-rect | real, img, mag, angle | make-polar | |
vektorová reprezentácia | polárna reprezentácia |
nevýhody:
vylepšenie manifestovaného typu pomocou tabuľky - odstránenie prvej nevýhody, väcšia modularita
rect | polar | |
---|---|---|
real | real-rect | real-polar |
img | img-rect | img-polar |
mag | mag-rect | mag-polar |
angle | angle-rect | angle-polar |
pridať nový objekt znamená pridať (naplniť) nový stĺpec tabuľky
správcavšeobecná aritmetika
úrovne abstrakcie
aritmetika | ||||
add, sub, mul, div | ||||
generická aritmetika | ||||
+, -, *, / | +c, -c, *c, /c | |||
reálna aritmetika |
komplexná aritmetika | |||
make-rect | real, img, mag, angle | make-polar | ||
vektorová reprezentácia | polárna reprezentácia |
tabuľka operátorov a typov
real | complex | |
---|---|---|
add | +number | +complex |
sub | -number | -complex |
mul | *number | *complex |
div | /number | /complex |
komplexné čísla vo všeobecnej aritmetike
komplexné číslo x + yi je reprezentované (bodkovým)
zoznamom '(complex rect x . y);
komplexné číslo r + cis u je reprezentované (bodkovým)
zoznamom '(complex polar r . u)
Príklad:
(1 + 1i) + (1 + 2i) = (add (complex rect 1 . 1) (complex rect 1 . 2)) = (+complex (rect 1 . 1) (rect 1 . 2)) = (make-complex (+c (rect 1 . 1) (rect 1 . 2))) = (make-complex (make-rect (+ (real (rect 1 . 1)) (real (rect 1 . 2))) (+ (img (rect 1 . 1)) (img (rect 1 . 2))))) = (make-complex (make-rect (+ 1 1) (+ 1 2))) = (make-complex (make-rect 2 3)) = (make-complex (rect 2 . 3)) = (complex rect 2 . 3)
primitívne typy vo všeobecnej aritmetike
pretože k primitívnym typom už existujú v prostredí testy (napr. number?), tieto typy sa môžu zaobísť bez nálepiek
všeobecná aritmetika nad rôznymi typmi
real | complex | |
---|---|---|
real | real->complex | |
complex |
real | complex | |
---|---|---|
up | real->complex |
operácia nad rôznymi typmi sa môže vykonať, len ak
majú tieto typy spoločný nadtyp;
v takom prípade treba nájsť najmenší spoločný nadtyp
a vstupné objekty naň previesť
pri manifestovanom type boli "inteligentné"
operátory, ktoré sa rozhodovali podľa typu;
pri posielaní správ sú "inteligentné" typy, ktoré
sa rozhodujú podľa operátoru
Last Updated on 26-Oct-2000
By Petrovic Pavol
E-mail: ppetrovi@dent.ii.fmph.uniba.sk