תכנות פונקציונאלי -תרגול iii
Post on 19-Jan-2016
61 Views
Preview:
DESCRIPTION
TRANSCRIPT
III תכנות פונקציונאלי -תרגול
רקורסיה
סוגי רקורסיה
( רקורסית קצהtail recursion) יוצרת תהליך חישובי -
איטרטיבי )לולאה(.
)יוצרת תהליך רקורסיבי מלא. רקורסיה אמיתית )מלאה -
)מכילה קריאה רקורסיה לינארית )חד-ממדית -
רקורסיבית יחידה.
)מכילה יותר מקריאה רקורסיה מורכבת )רב-ממדית -
רקורסיבית אחת.
פונקציות מהסוג:
איבררשימה
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))))
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)) ))
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)) ))
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)) ) ))
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)
4תרגיל
א. כתבו פונקציה בוליאנית המקבלת רשימה
ובודקת אם קיים ברשימה איבר שהוא מספר.
( define (exist-num? L )
(cond
( (empty? L) #f)
( (number? (first L) #t)
(else (exist-num? (rest L))))
4תרגיל
ב. כתבו פונקציה בוליאנית המקבלת רשימה
ובודקת אם קיים ברשימה איבר שהוא רשימה.
( define (exist-list? L )
(cond
( (empty? L) #f)
( (list? (first L) #t)
(else (exist-list? (rest L))))
4תרגיל
ג. כתבו פונקציה המקבלת רשימה ופונקציה
בוליאנית )פרדיקט( ומחזירה "אמת" אם קיים איבר
אחד לפחות המקיים תנאי זה ו"שקר" – אחרת.( define (cond-hold L f )
(cond
( (empty? L) #f)
( (f (first L) #t)
(else (cond-hold (rest L) f))))
5תרגיל
כתבו פונקציה המקבלת רשימה ופונקציה בוליאנית
ובודקת אם כל איברי הרשימה המקיימים תנאי זה.
( define (all-cond-hold L predicate )
(cond
( (empty? L) #t)
( (predicate (first L)) (all-cond-hold (rest L) predicate) )
(else #f)))
6תרגיל
את ומחזירה מספרים רשימת המקבלת פונקציה כתבו
מספר האיברים הקטנים מממוצע כל האיברים ברשימה.
( define (avg L )
( / (sum-list L) (length L)))
( 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)) ) ))
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)))) )
פונקציות מהסוג:
רשימהרשימה
פונקציות מיפוי
1תרגיל
כתבו פונקציה המקבלת רשימת רשימות ומחזירה את
רשימת האורכים של הרשימות ברשימת הקלט.
(define (len-lists L)
(cond
((empty? L) '())
(else (cons (length (first L)) (len-lists (rest L))))))
2תרגיל
כתבו פונקציה המקבלת רשימת רשימות מספרים
ומחזירה את רשימת הממוצעים של רשימות הרשימה
define (avg-list L))המקורית.
(cond
((empty? L) '())
(else (cons (avg (first L)) (avg-list (rest L)))) ))
3תרגיל
כתבו פונקציה המקבלת רשימה ופונקצית פעולה אונרית
ומחזירה רשימה כך שעל כל איבר ברשימת הקלט
מופעלת פעולה הנתונה.
(define (map_list L func)
(cond
((empty? L) '())
(else (cons (func (first L)) (map_list (rest L) func)))))
פונקציות סינון
4תרגיל
כתבו פונקציה המקבלת רשימה ומחזירה רשימת כל
האיברים הראשונים מתוכה.
(define (prime-list L)
(cond
([empty? L] '())
([prime? (first L)] (cons (first L) (prime-list (rest L))))
(else (prime-list (rest L))) ))
5תרגיל
כתבו פונקציה המקבלת רשימה ומחזירה רשימה שבה כל
האטומים המופיעים ברשימה קלט.
(define (atom-list L)
(cond
([empty? L] '())
([atom? (first L)] (cons (first L) (atom-list (rest L))))
(else (atom-list (rest L))) ))
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) ))
top related