1 / 23

תכנות פונקציונאלי -תרגול III

תכנות פונקציונאלי -תרגול III. רקורסיה. סוגי רקורסיה. רקורסית קצה ( tail recursion ) - יוצרת תהליך חישובי איטרטיבי (לולאה). רקורסיה אמיתית (מלאה) - יוצרת תהליך רקורסיבי מלא. רקורסיה לינארית (חד-ממדית) - מכילה קריאה רקורסיבית יחידה.

bono
Télécharger la présentation

תכנות פונקציונאלי -תרגול III

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. תכנות פונקציונאלי -תרגול III רקורסיה

  2. סוגי רקורסיה • רקורסית קצה (tail recursion) - יוצרת תהליך חישובי איטרטיבי (לולאה). • רקורסיה אמיתית (מלאה) - יוצרת תהליך רקורסיבי מלא. • רקורסיה לינארית (חד-ממדית) - מכילה קריאה רקורסיבית יחידה. • רקורסיה מורכבת (רב-ממדית) - מכילה יותר מקריאה רקורסיבית אחת.

  3. פונקציות מהסוג: רשימה  איבר

  4. תרגיל 1 א. כתוב פונקציה המקבלת רשימה של מספרים טבעיים ומחשבת את סכום המספרים החד-ספרתיים שברשימה. ( define (sum-one-dig L) (cond ( (empty? L) 0) ( (< 10 (first L)) ( + (first L) (sum-one-dig (rest L))) (else ((sum-one-dig (rest L))))

  5. תרגיל 1 ב. הרחיבו את הפונקציה מסעיף א', כך שתקבל גם רשימות לא שטוחות. תזכורת: רשימה לא שטוחה היא רשימה המכילה (גם) רשימות. ( define (sum-one-dig L) (cond ( (empty? L) 0) ( (list? (first L)) (+ (sum-one-dig (first L)) (sum-one-dig (rest L) ) )) ( (< 10 (first L)) (+ (first L) (sum-one-dig (rest L))) (else (sum-one-dig (rest L)) ))

  6. תרגיל 2 א. כתוב פונקציה המקבלת רשימת מספרים ומספר נוסף ומחזירה את מספר האיברים הגדולים ממספר זה. ( define (greater-than L x) (cond ( [empty? L] 0) ( [> (first L) x ] (add1 (greater-than (rest L) x) )) (else (greater-than (rest L) x)) ))

  7. תרגיל 2 ב. הרחיבו את הפונקציה מסעיף א' כך שתקבל גם רשימות לא שטוחות. ( define (greater-than L x) (cond ( (empty? L) 0) ((list? (first L) (+ (greater-than (first L) x) (greater-than (rest L) x)) ) ( (> (first L) x ) (add1 (greater-than (rest L) x)) ) (else (greater-than (rest L) x)) ) ))

  8. תרגיל 3 א. כתבו פונקציה המקבלת רשימת מספרים ומחזירה את המקסימום מבין איברי הרשימה. ב. הרחיבו את הפונקציה מסעיף א' כך שתקבל רשימות לא שטוחות. ( define (max-L L) (max-help L (first L) ) (define (max-help L max) (cond ( (empty? L) max) (( > (first L) max ) (max-help (rest L) (first L))) ( else max-help (rest L) max)

  9. תרגיל 4 א. כתבו פונקציה בוליאנית המקבלת רשימה ובודקת אם קיים ברשימה איבר שהוא מספר. ( define (exist-num? L ) (cond ( (empty? L) #f) ( (number? (first L) #t) (else (exist-num? (rest L))))

  10. תרגיל 4 ב. כתבו פונקציה בוליאנית המקבלת רשימה ובודקת אם קיים ברשימה איבר שהוא רשימה. ( define (exist-list? L ) (cond ( (empty? L) #f) ( (list? (first L) #t) (else (exist-list? (rest L))))

  11. תרגיל 4 ג. כתבו פונקציה המקבלת רשימה ופונקציה בוליאנית (פרדיקט) ומחזירה "אמת" אם קיים איבר אחד לפחות המקיים תנאי זה ו"שקר" – אחרת. ( define (cond-hold L f ) (cond ( (empty? L) #f) ( (f (first L) #t) (else (cond-hold (rest L) f))))

  12. תרגיל 5 כתבו פונקציה המקבלת רשימה ופונקציה בוליאנית ובודקת אם כל איברי הרשימה המקיימים תנאי זה. ( define (all-cond-hold L predicate ) (cond ( (empty? L) #t) ( (predicate (first L)) (all-cond-hold (rest L) predicate) ) (else #f)))

  13. תרגיל 6 כתבו פונקציה המקבלת רשימת מספרים ומחזירה את מספר האיברים הקטנים מממוצע כל האיברים ברשימה. ( define (sum-list L ) ( cond (( empty? L) 0) (else (+ (first L) (sum-list (rest L)) ) )) ( define (gt-avg L ) ( cond (( empty? L) 0) ((> (first L) (avg L)) (add1 (gt-avg (rest L)))) (else (gt-avg (rest L)) ) )) ( define (avg L ) ( / (sum-list L) (length L)))

  14. תרגיל 7 כתבו פונקציה המקבלת רשימת מספרים ומחזירה את מספר האיברים ברשימה שערכם זהה לערך מקומם ברשימה.                ( define (place_eq_val L ) ( help L 0)) (define (help L pl) (cond ((empty? L) 0) ((= pl (first L)) (add1 (help (rest L) (add1 pl)))) (else (help (rest L) (add1 pl)))) )

  15. פונקציות מהסוג: רשימה  רשימה

  16. פונקציות מיפוי

  17. תרגיל 1 כתבו פונקציה המקבלת רשימת רשימות ומחזירה את רשימת האורכים של הרשימות ברשימת הקלט. (define (len-lists L) (cond ((empty? L) '()) (else (cons (length (first L)) (len-lists (rest L))))))

  18. תרגיל 2 כתבו פונקציה המקבלת רשימת רשימות מספרים ומחזירה את רשימת הממוצעים של רשימות הרשימה המקורית. (define (avg-list L) (cond ((empty? L) '()) (else (cons (avg (first L)) (avg-list (rest L)))) ))

  19. תרגיל 3 כתבו פונקציה המקבלת רשימה ופונקצית פעולה אונרית ומחזירה רשימה כך שעל כל איבר ברשימת הקלט מופעלת פעולה הנתונה. (define (map_list L func) (cond ((empty? L) '()) (else (cons (func (first L)) (map_list (rest L) func)))))

  20. פונקציות סינון

  21. תרגיל 4 כתבו פונקציה המקבלת רשימה ומחזירה רשימת כל האיברים הראשונים מתוכה. (define (prime-list L) (cond ([empty? L] '()) ([prime? (first L)] (cons (first L) (prime-list (rest L)))) (else (prime-list (rest L))) ))

  22. תרגיל 5 כתבו פונקציה המקבלת רשימה ומחזירה רשימה שבה כל האטומים המופיעים ברשימה קלט. (define (atom-list L) (cond ([empty? L] '()) ([atom? (first L)] (cons (first L) (atom-list (rest L)))) (else (atom-list (rest L))) ))

  23. תרגיל 6 כתבו פונקציה המקבלת רשימה ופונק' בוליאנית ומחזירה רשימה שבה מופיעים רק איברי הרשימה המקיימים תנאי זה. (define (filter-list L func) (cond ([empty? L] '()) ([func (first L)] (cons (first L) (filter-list (rest L) func))) (else (filter-list (rest L) func) ))

More Related