1 / 30

Multiple representations of data

Multiple representations of data. Complex numbers. imaginary. 3 + 2 i. 2. 13. atan(2/3). real. 3. Complex numbers arithmetic. a + bi + (c + di) = a+c + (b+d)i r1e (i 1) * r2e (i 2) = (r1r2)e (i(1+ 2)). High level usage. ( define (add-complex z1 z2)

inez
Download Presentation

Multiple representations of data

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Multiple representations of data מבוא מורחב

  2. Complex numbers imaginary 3 + 2i 2 13 atan(2/3) real 3 מבוא מורחב

  3. Complex numbers arithmetic a + bi + (c + di) = a+c + (b+d)i r1e(i1) * r2e(i 2) = (r1r2)e(i(1+ 2)) מבוא מורחב

  4. High level usage (define (add-complex z1 z2) (make-from-real-imag (+ (real-part z1) (real-part z2)) (+ (imag-part z1) (imag-part z2)))) (define (sub-complex z1 z2) (make-from-real-imag (- (real-part z1) (real-part z2)) (- (imag-part z1) (imag-part z2)))) (define (mul-complex z1 z2) (make-from-mag-ang (* (magnitude z1) (magnitude z2)) (+ (angle z1) (angle z2)))) (define (div-complex z1 z2) (make-from-mag-ang (/ (magnitude z1) (magnitude z2)) (- (angle z1) (angle z2)))) מבוא מורחב

  5. המימוש שמדמיין אריאל (define (real-part z) (car z)) (define (imag-part z) (cdr z)) (define (make-from-real-imag x y) (cons x y)) (define (magnitude z) (sqrt (+ (square (real-part z)) (square (imag-part z))))) (define (angle z) (atan (imag-part z) (real-part z))) (define (make-from-mag-ang r a) (cons (* r (cos a)) (* r (sin a)))) מבוא מורחב

  6. המימוש מהזווית של מני (define (make-from-mag-ang r a) (cons r a)) (define (magnitude z) (car z)) (define (angle z) (cdr z)) (define (real-part z) (* (magnitude z) (cos (angle z)))) (define (imag-part z) (* (magnitude z) (sin (angle z)))) (define (make-from-real-imag x y) (cons (sqrt (+ (square x) (square y))) (atan y x))) מבוא מורחב

  7. How do we have them both ? We tag the data: ('rectangular 3 2) ('polar (sqrt 13) (atan 2 3)) מבוא מורחב

  8. How do we have them both ? We tag the data: (define (attach-tag type-tag contents) (cons type-tag contents)) (define (type-tag datum) (if (pair? datum) (car datum) (error "Bad tagged datum -- TYPE-TAG" datum))) (define (contents datum) (if (pair? datum) (cdr datum) (error "Bad tagged datum -- CONTENTS" datum))) מבוא מורחב

  9. Complex numbers: having both reps. (define (rectangular? z) (eq? (type-tag z) 'rectangular)) (define (polar? z) (eq? (type-tag z) 'polar)) (define (real-part z) (cond ((rectangular? z) (real-part-rectangular (contents z))) ((polar? z) (real-part-polar (contents z))) (else (error "Unknown type -- REAL-PART" z)))) מבוא מורחב

  10. Complex numbers: having both reps. (define (magnitude z) (cond ((rectangular? z) (magnitude-rectangular (contents z))) ((polar? z) (magnitude-polar (contents z))) (else (error "Unknown type -- MAGNITUDE" z)))) angle, imag-part are similar מבוא מורחב

  11. and we have to rename (define (real-part-rectangular z) (car z)) (define (imag-part-rectangular z) (cdr z)) (define (magnitude-rectangular z) (sqrt (+ (square (real-part-rectangular z)) (square (imag-part-rectangular z))))) (define (angle-rectangular z) (atan (imag-part-rectangular z) (real-part-rectangular z))) (define (make-from-real-imag-rectangular x y) (attach-tag 'rectangular (cons x y))) (define (make-from-mag-ang-rectangular r a) (attach-tag 'rectangular (cons (* r (cos a)) (* r (sin a))))) מבוא מורחב

  12. and we have to rename (define (real-part-polar z) (* (magnitude-polar z) (cos (angle-polar z)))) (define (imag-part-polar z) (* (magnitude-polar z) (sin (angle-polar z)))) (define (magnitude-polar z) (car z)) (define (angle-polar z) (cdr z)) (define (make-from-real-imag-polar x y) (attach-tag 'polar (cons (sqrt (+ (square x) (square y))) (atan y x)))) (define (make-from-mag-ang-polar r a) (attach-tag 'polar (cons r a))) מבוא מורחב

  13. Constructors (define (make-from-real-imag x y) (make-from-real-imag-rectangular x y)) (define (make-from-mag-ang r a) (make-from-mag-ang-polar r a)) מבוא מורחב

  14. add-complex, sub-complex real-part imag-part magnitude angle polar representation Rectangular representation מבוא מורחב

  15. Difficulties ? • The generic selectors must know about all reps. Bureacracy • (define (real-part z) • (cond ((rectangular? z) • (real-part-rectangular (contents z))) • ((polar? z) • (real-part-polar (contents z))) • (else (error "Unknown type -- REAL-PART" z)))) • Care about name clashes • ==> • Implementation is not additive • Care about when there is a tag and when there isn’t מבוא מורחב

  16. Data directed programming work directly with the table: types Polar Rectangular real-part imag-part magnitude angle real-part-rectangular imag-part-rectangular magnitude-rectangular angle-rectangular real-part-polar imag-part-polar magnitude-polar angle-polar operations מבוא מורחב

  17. Data-directed programming (Cont) Assume we have (put <op> <type> <item>) (get <op> <type>) will do them later in the course. מבוא מורחב

  18. Data-directed programming (Cont) Assume we have (put <op> <type> <item>) (get <op> <type>) will do them later in the course. מבוא מורחב

  19. Rectangular implementation (define (install-rectangular-package) ;; internal procedures (define (real-part z) (car z)) (define (imag-part z) (cdr z)) ... (define (make-from-mag-ang r a) (cons (* r (cos a)) (* r (sin a)))) ;; interface to the rest of the system (define (tag x) (attach-tag 'rectangular x)) (put 'real-part '(rectangular) real-part) (put 'imag-part '(rectangular) imag-part) (put 'magnitude '(rectangular) magnitude) (put 'angle '(rectangular) angle) (put 'make-from-real-imag 'rectangular (lambda (x y) (tag (make-from-real-imag x y)))) (put 'make-from-mag-ang 'rectangular (lambda (r a) (tag (make-from-mag-ang r a)))) 'done)

  20. Polar implementation (define (install-polar-package) ;; internal procedures (define (magnitude z) (car z)) (define (angle z) (cdr z)) ... (define (make-from-real-imag x y) (cons (sqrt (+ (square x) (square y))) (atan y x))) ;; interface to the rest of the system (define (tag x) (attach-tag 'polar x)) (put 'real-part '(polar) real-part) (put 'imag-part '(polar) imag-part) (put 'magnitude '(polar) magnitude) (put 'angle '(polar) angle) (put 'make-from-real-imag 'polar (lambda (x y) (tag (make-from-real-imag x y)))) (put 'make-from-mag-ang 'polar (lambda (r a) (tag (make-from-mag-ang r a)))) 'done)

  21. Generic selectors (define (real-part z) (apply-generic 'real-part z)) (define (imag-part z) (apply-generic 'imag-part z)) (define (magnitude z) (apply-generic 'magnitude z)) (define (angle z) (apply-generic 'angle z)) מבוא מורחב

  22. apply-generic (simple version) (define (simple-apply-generic op arg) (let ((type-tag (type-tag arg))) (let ((proc (get op (list type-tag)))) (if proc (proc (contents arg)) (error "No method for these types -- APPLY-GENERIC" (list op type-tag)))))) מבוא מורחב

  23. apply-generic (define (apply-generic op . args) (let ((type-tags (map type-tag args))) (let ((proc (get op type-tags))) (if proc (apply proc (map contents args)) (error "No method for these types -- APPLY-GENERIC" (list op type-tags)))))) (apply + (list 1 2 3 4)) ==> 10 מבוא מורחב

  24. Finally (define (make-from-real-imag x y) ((get 'make-from-real-imag 'rectangular) x y)) (define (make-from-mag-ang r a) ((get 'make-from-mag-ang 'polar) r a)) מבוא מורחב

  25. Alternative -- message passing style Make “intelligent” data objects. decompose the table by column types Polar Rectangular real-part imag-part magnitude angle real-part-rectangular imag-part-rectangular magnitude-rectangular angle-rectangular real-part-polar imag-part-polar magnitude-polar angle-polar operations מבוא מורחב

  26. Message passing style (define (make-from-real-imag x y) (define (dispatch op) (cond ((eq? op 'real-part) x) ((eq? op 'imag-part) y) ((eq? op 'magnitude) (sqrt (+ (square x) (square y)))) ((eq? op 'angle) (atan y x)) (else (error "Unknown op -- MAKE-FROM-REAL-IMAG" op)))) dispatch) (define (apply-generic op arg) (arg op)) מבוא מורחב

  27. Midterm last spring ממש/י שגרה (add-ind init lst) שמקבלת כקלט אינדקס התחלתיinit ורשימהlst ומחזירה רשימה שאיבריה הם זוגות. האיברים הראשונים בזוגות הם אינדקסים רצים שמתחילים ב-init. האיברים השניים בזוגות הם איברי הרשימהlst. לדוגמא: (add-ind 0 (list 5 2 7)) ==> ((0 . 5) (1 . 2) (2 . 7)) (define (add-ind init lst) (if (null? lst) nil (cons (cons init (car lst)) (add-ind (+ 1 init) (cdr lst))))) מבוא מורחב

  28. Midterm last spring (cont) השלם/י את מימוש השגרה (max-ind lst-ind) שמקבלת רשימה שהתקבלה מהפעלתadd-ind על רשימת מספרים, ומחזירה את הזוג שבו האיבר השני הוא הגדול ביותר. לדוגמא: (max-ind (add-ind 0 (list 10 17 2 5))) ==> (1 . 17) (define (max-ind lst-ind) (accumulate ________________________________ ____________ ____________ )) (lambda (x y) (if (> (cdr x) (cdr y)) x y)) (car lst-ind) lst-ind מבוא מורחב

  29. Midterm last spring (Cont) תהאlst רשימת מספרים שכל איבריה שונים. הגדר שגרה (break-list lst) שמחזירה רשימה באורך שלוש. האיבר הראשון ברשימה שמוחזרת היא רשימת איבריlst שמופיעים לפני האיבר המירבי שלlst. האיבר השני ברשימה הוא האיבר המירבי ב-lst. האיבר השלישי הוא רשימת איבריlst שמופיעים לאחר האיבר המירבי. לדוגמא: (break-list ‘(1 8 3 6 4 9 2 5 7))  ( (1 8 3 6 4) 9 (2 5 7) ) (break-list ‘(5 4 3 2 1))  ( () 5 (4 3 2 1) ) (break-list ‘(7))  ( () 7 () ) מבוא מורחב

  30. Midterm last spring (Cont) (define (break-lst lst) (let ((lst-ind (add-ind lst))) (let ((maxi (max-ind lst-ind))) (list (map ______________________________ (filter _______________________________ lst-ind)) ____________ (map ______________________________ (filter _______________________________ lst-ind)) )))) cdr (lambda (x) (< (car x) (car maxi))) (cdr maxi) cdr (lambda (x) (> (car x) (car maxi))) מבוא מורחב

More Related