Download presentation
Presentation is loading. Please wait.
Published byCody Willis Modified over 9 years ago
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)))))))
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.