Presentation is loading. Please wait.

Presentation is loading. Please wait.

Practice session 5 טיפוסים מורכבים Abstract Data Types הכנה לעבודה 3.

Similar presentations


Presentation on theme: "Practice session 5 טיפוסים מורכבים Abstract Data Types הכנה לעבודה 3."— Presentation transcript:

1 Practice session 5 טיפוסים מורכבים Abstract Data Types הכנה לעבודה 3

2  מייצג זוג סדור של ערכים מכל טיפוס שהוא  בנאי : cons Type: [T1 * T2 -> PAIR(T1, T2)]  צורת ה -"toString" של Pair: ‘(a. b)  סלקטורים : car,cdr Type: [PAIR(T1, T2) -> T1] Type: [PAIR(T1, T2) -> T2]

3 > (cons 1 2) ' (2. 1) >(cons 1 (cons 2 (lambda () (+ 1 2)))) '(1 2. # ) (1. (2. # )) >(cons (car (cons 1 2)) (cdr (cons 3 4))) '(4. 1) >(cons (cons 1 2) (cons 1 3)) ((3. 1) 2. 1)'

4 >(define c (cons 1 (cons 'cat (cons 3 (cons 4 5))))) > c '(1 cat 3 4. 5) > (cdddr c) '(4. 5) > (cdr (cdr (cdr c))) '(4. 5) > (cadr c) 'cat > (car (cdr c)) 'cat

5  מייצגת סדרה סדורה של ערכים מכל טיפוס שהוא  הגדרה רקורסיבית : רשימה היא זוג של איבר ראשון ורשימת שאר האיברים, כאשר הרשימה הריקה היא האיבר האחרון.  שני בנאים : cons, list  מבחינים בין רשימה הומוגנית List(T) ורשימה הטרוגנית LIST cons: Type: [T * List(T) -> List(T)] Type: [T * LIST -> LIST] Type: [T1 * List (T2) -> LIST], T1≠T2 list: Type: [T * T *... * T -> List(T)] Type: [T1 * T2 *... * Tn -> LIST]

6  סלקטורים : car,cdr car: Type: [LIST(T) -> T] Type: [LIST -> T] cdr: Type: [LIST(T) -> LIST(T)] Type: [LIST -> LIST]  list?, null?, equal?, append, length

7 > (define a (list 3 4 5)) > a (5 4 3)' > (cons 1 a) '(1 3 4 5) > (list) '() > (list (list 1 2) 1 2) '((1 2) 1 2)

8 > (define L2 (list 1 (list 2 3) 6)) > L2 '(1 (2 3) 6) > (car L2) 1 > (cdddr L2) '() > (list? (cons (list 2 3) 4)) #f > (list? (cons 4 (list 2 3))) #t

9 רוצים לכתוב פרוצדורת append שמקבלת שתי רשימות ומחברת אותן לרשימה אחת, ופרוצדורת flatten שמקבלת רשימה ו " משטחת " אותה. > (append (list 1 2 3) (list 4 5 6)) '(1 2 3 4 5 6) > (flatten (list 1 2 (list 3 (list) 4) 5 (list 6))) '(1 2 3 4 5 6)

10 Signature: append (list1, list2) Purpose: return a list which appends the arguments lists, from left to right. Type: [LIST * LIST -> LIST] (define append (lambda (x y) (if (null? x) y (cons (car x) (append (cdr x) y)))))

11 Signature: flatten(list) Purpose: return a list of all argument "leaves". Type: [LIST -> LIST] (define flatten (lambda (x) (cond ((null? x) '()) ((not (pair? x)) (list x)) (else (append (flatten (car x)) (flatten (cdr x)))))))


Download ppt "Practice session 5 טיפוסים מורכבים Abstract Data Types הכנה לעבודה 3."

Similar presentations


Ads by Google