תכנות פונקציונאלי -תרגול
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

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


  • 115 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

תכנות פונקציונאלי -תרגול 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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Iii

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

רקורסיה


Iii

סוגי רקורסיה

  • רקורסית קצה (tail recursion) - יוצרת תהליך חישובי איטרטיבי (לולאה).

  • רקורסיה אמיתית (מלאה) - יוצרת תהליך רקורסיבי מלא.

  • רקורסיה לינארית (חד-ממדית) - מכילה קריאה רקורסיבית יחידה.

  • רקורסיה מורכבת (רב-ממדית) - מכילה יותר מקריאה רקורסיבית אחת.


Iii

פונקציות מהסוג:

רשימה  איבר


Iii

תרגיל 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))))


Iii

תרגיל 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)) ))


Iii

תרגיל 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)) ))


Iii

תרגיל 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)) ) ))


Iii

תרגיל 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)


Iii

תרגיל 4

א. כתבו פונקציה בוליאנית המקבלת רשימה ובודקת אם קיים ברשימה איבר שהוא מספר.

( define (exist-num? L )

(cond

( (empty? L) #f)

( (number? (first L) #t)

(else (exist-num? (rest L))))


Iii

תרגיל 4

ב. כתבו פונקציה בוליאנית המקבלת רשימה ובודקת אם קיים ברשימה איבר שהוא רשימה.

( define (exist-list? L )

(cond

( (empty? L) #f)

( (list? (first L) #t)

(else (exist-list? (rest L))))


Iii

תרגיל 4

ג. כתבו פונקציה המקבלת רשימה ופונקציה בוליאנית (פרדיקט) ומחזירה "אמת" אם קיים איבר אחד לפחות המקיים תנאי זה ו"שקר" – אחרת.

( define (cond-hold L f )

(cond

( (empty? L) #f)

( (f (first L) #t)

(else (cond-hold (rest L) f))))


Iii

תרגיל 5

כתבו פונקציה המקבלת רשימה ופונקציה בוליאנית ובודקת אם כל איברי הרשימה המקיימים תנאי זה.

( define (all-cond-hold L predicate )

(cond

( (empty? L) #t)

( (predicate (first L)) (all-cond-hold (rest L) predicate) )

(else #f)))


Iii

תרגיל 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)))


Iii

תרגיל 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)))) )


Iii

פונקציות מהסוג:

רשימה  רשימה


Iii

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


Iii

תרגיל 1

כתבו פונקציה המקבלת רשימת רשימות ומחזירה את רשימת האורכים של הרשימות ברשימת הקלט.

(define (len-lists L)

(cond

((empty? L) '())

(else (cons (length (first L)) (len-lists (rest L))))))


Iii

תרגיל 2

כתבו פונקציה המקבלת רשימת רשימות מספרים ומחזירה את רשימת הממוצעים של רשימות הרשימה המקורית.

(define (avg-list L)

(cond

((empty? L) '())

(else (cons (avg (first L)) (avg-list (rest L)))) ))


Iii

תרגיל 3

כתבו פונקציה המקבלת רשימה ופונקצית פעולה אונרית ומחזירה רשימה כך שעל כל איבר ברשימת הקלט מופעלת פעולה הנתונה.

(define (map_list L func)

(cond

((empty? L) '())

(else (cons (func (first L)) (map_list (rest L) func)))))


Iii

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


Iii

תרגיל 4

כתבו פונקציה המקבלת רשימה ומחזירה רשימת כל האיברים הראשונים מתוכה.

(define (prime-list L)

(cond

([empty? L] '())

([prime? (first L)] (cons (first L) (prime-list (rest L))))

(else (prime-list (rest L))) ))


Iii

תרגיל 5

כתבו פונקציה המקבלת רשימה ומחזירה רשימה שבה כל האטומים המופיעים ברשימה קלט.

(define (atom-list L)

(cond

([empty? L] '())

([atom? (first L)] (cons (first L) (atom-list (rest L))))

(else (atom-list (rest L))) ))


Iii

תרגיל 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) ))


  • Login