Symbolické programovanie a LISP, zima 2000/2001

(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

komplexná aritmetika


  1. fixný typ

  1. manifestovaný typ (objekty s "nálepkou" typu)

nevýhody:


  1. dátami riadené programovanie

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ávca

vš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

správca


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

  1. viacdimenzionálna tabuľka pre všetky operátory a operandy
    nereálne pre operátory s veľkým počtom operandov
  2. prevodová tabuľka typov
  real complex
real   real->complex
complex    

správca

  1. hierarchia typov a tabuľka nadtypov
  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ť


  1. posielanie správ

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