תכנות פונקציונאלי - i

31
ייייי ייייייייייי- I יייי

Upload: nell-henson

Post on 01-Jan-2016

49 views

Category:

Documents


3 download

DESCRIPTION

תכנות פונקציונאלי - I. מבוא. תכנות פונקציונאלי. הפרדיגמה צמחה בשנות ה- 60 בהקשר לאינטליגנציה מלאכותית. פעילות התכנות נתפסת כפעולת פונקציות עם קלט ופלט: אין הוראות השמה במקום לולאות משתמשים ברקורסיה שפות תכנות השייכות לפרדיגמה הפונקציונלית מספקות בדרך-כלל: מבנה נתונים יחיד - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: תכנות פונקציונאלי -   I

I - תכנות פונקציונאלי

מבוא

Page 2: תכנות פונקציונאלי -   I

תכנות פונקציונאלי

-בהקשר לאינטליגנציה מלאכותית. 60הפרדיגמה צמחה בשנות ה

:פעילות התכנות נתפסת כפעולת פונקציות עם קלט ופלטאין הוראות השמה

במקום לולאות משתמשים ברקורסיה

:שפות תכנות השייכות לפרדיגמה הפונקציונלית מספקות בדרך-כללמבנה נתונים יחיד

פונקציות יסוד לעיבוד מבנה הנתונים

אמצעים לבניית פונקציות חדשות

פונקציות הן אובייקטים מסדר ראשון

:השפה שבאמצעותה נכיר את הפרדיגמהDrSchme

Page 3: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))

Page 4: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))5

Page 5: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))5

(abs (+ 7 -8 5 0 1 -10 (add1 8)))

Page 6: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))5

(abs (+ 7 -8 5 0 1 -10 (add1 8)))4

Page 7: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))5

(abs (+ 7 -8 5 0 1 -10 (add1 8)))4

(sqrt (abs (+ 7 -8 5 0 1 -10 (add1 3))))

Page 8: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))

5 (abs (+ 7 -8 5 0 1 -10 (add1 8)))

4 (sqrt (abs (+ 7 -8 5 0 1 -10 (add1 3))))

1

Page 9: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))5

(abs (+ 7 -8 5 0 1 -10 (add1 8)))4

(sqrt (abs (+ 7 -8 5 0 1 -10 (add1 3))))

1 (min 19 (sub1 (add1 5)) (+ (min 99 1) (sqrt 9)) 77)

Page 10: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))5

(abs (+ 7 -8 5 0 1 -10 (add1 8)))4

(sqrt (abs (+ 7 -8 5 0 1 -10 (add1 3))))1

(min 19 (sub1 (add1 5)) (+ (min 99 1) (sqrt 9)) 77)4

Page 11: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))5

(abs (+ 7 -8 5 0 1 -10 (add1 8)))4

(sqrt (abs (+ 7 -8 5 0 1 -10 (add1 3))))1

(min 19 (sub1 (add1 5)) (+ (min 99 1) (sqrt 9)) 77)4

(* (min 19 (sub1 (add1 5)) (+ (min 99 1) (sqrt 9)) 77) -2)

Page 12: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - דוגמאות

(abs (+ 7 -8 5 0 1 -10))5

(abs (+ 7 -8 5 0 1 -10 (add1 8)))4

(sqrt (abs (+ 7 -8 5 0 1 -10 (add1 3))))1

(min 19 (sub1 (add1 5)) (+ (min 99 1) (sqrt 9)) 77)4

(* (min 19 (sub1 (add1 5)) (+ (min 99 1) (sqrt 9)) 77) -2)-8

Page 13: תכנות פונקציונאלי -   I

תכנות פונקציונאלי

מאפיינים עד כה:1סיכום ביניים - הרכבת פונקציות

Prefix

מבנה אחיד של ביטויים

parameter 2 …) (function parameter 1

Page 14: תכנות פונקציונאלי -   I

תכנות פונקציונאלי – עיבוד רשימות, דוגמאות

> (reverse '(7 6 5))

(5 6 7) (cons '(a b c) '(4 5 6))

((a b c) 4 5 6) > (cons (first '(5 6 7)) '(8 15 -17))

(5 8 15 -17) > (list-ref '(6 5 3 2 1) 0)

6 > (list-ref '(6 (5 3) 2 1) 1)

(5 3)

Page 15: תכנות פונקציונאלי -   I

תכנות פונקציונאלי – עיבוד רשימות, דוגמאות

> (cons (first '(5 6 7)) '(8 15 -17))

(5 8 15 -17)

> (list-ref (cons (first '(5 6 7)) '(8 15 -17)) 2)

15

(length (cons

(list-ref (cons (first '(5 6 7)) '(8 15 -17)) 2) '(7 6 5 )))

4

Page 16: תכנות פונקציונאלי -   I

תכנות פונקציונאלי

עיבוד רשימות:2סיכום ביניים – רשימות

פעולות פירוק

פעולות הרכבה

Page 17: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - משימות

.רשמו שני ביטויים שלדעתכם ניתן לבנות בשפה

על כל ביטוי לכלול לפחות שלוש פונקציות.

.בדקו את הביטויים על המחשב

?לאיזה סוג בעיות מתאים לדעתכם להשתמש בסוג חשיבה כזה

Page 18: תכנות פונקציונאלי -   I

1תכנות פונקציונאלי – שיעור

פונקציות יסוד מספריות

פונקציות יסוד לרשימות

פונקציות יסוד לוגיות

הוראות תנאי

הגדרת פונקציות

Page 19: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - פונקציות יסוד מספריות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(

שם הפונקצ

יה

ערך הפונקציהדוגמה

abs(abs -9) 9ערך מוחלט

add1(add1 6) 7 1הוספת

sub1(sub1 6) 5 1הפחתת

sqrt(sqrt 9) 3שורש

expt(expt 2 3) 8 העלאה בחזקהxy

ceiling(ceiling 3.1) 4.0ערך עליון

floor(floor 3.1) 3.0ערך תחתון

round(round 3.1) 3.0עיגול

Page 20: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - פונקציות יסוד מספריות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(

שם הפונקציה

ערך הפונקציהדוגמה

max(max 7 -9 12) 12ערך מקסימלי

min(min 0 78 -9) -9ערך מינימלי

quotient(quotient 14 3) 4 תוצאת) בשלמים חלוקה החלוקה, ללא השארית)

remainder(remainder 14 3) 2שארית החלוקה

gcd(gcd 12 8) 4המחלק המשותף הגדול ביותר

lcm(lcm 12 8) 24 הקטנה המשותפת המכפלה ביותר

random(random 4) 0מספר אקראי בתחום) - n-1 (

Page 21: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - פונקציות יסוד מספריות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(

בנוסף, ניתן להשתמש בארבע פעולות החשבון

/ * - +

דוגמה

( + 5 ( - 9 8 ) ( * 2 10 ) ( / 90 3 ) ) 56

Page 22: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - פונקציות יסוד לרשימות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(

שם הפונקצ

יה

הערך המוחזרדוגמה

first(first ‘(I love you)) ‘I האיבר הראשון ברשימה

second(second ‘(I love you)) ‘love

האיבר השני ברשימה

third(third ‘(I love you)) ‘you

האיבר השלישי ברשימה

rest(rest ‘(I love you)) ‘(love you)

הרשימה ללא האיבר הראשון שלה

length(length ‘(I love you)) 3 מספר האיבריםברשימה

list-ref(list-ref ‘(I love you) 2) ‘you

ברשימה nהאיבר ה- (מקומו של האיבר

)0הראשון הוא

Page 23: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - פונקציות יסוד לרשימות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(

שם הפונקציה

הערך המוחזרדוגמה

reverse(reverse ‘(I love you)) ‘(you love I)

הרשימה בסדר הפוך של איבריה

cons(cons ‘(a b) ‘(c d)) ‘( (a b) c d)

הרשימה השנייה שלתחילתה מוכנס הארגומנט הראשון

list(list ‘(a b) ‘(c d)) ‘( (a b) (c d) )

רשימה חדשה שמורכבת מהארגומנטים

append(append ‘(a b) ‘(c d)) ‘(a b c d)

רשימה המורכבת מאברי הרשימות המקוריות

empty?(empty? ‘( ) ) #t פונקציה לוגית המקבלת אם t#רשימה ומחזירה

הרשימה ריקה

Page 24: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - פונקציות יסוד לוגיות

)מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(

היא פונקציה שמחזירה אחד פונקציה לוגית

)שקר(f# )אמת( או t#משני ערכים -

ניתן להשתמש בפעולות ההשוואה

<= , >= , > , < , =

מומלץ לסמן פונקציה כזו על ידי תוספת של

סימן שאלה בסוף שמה

Page 25: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - פונקציות יסוד לוגיות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(

שם הפונקציה

אם הארגומנט t#מוחזר דוגמההוא

atom?(number? ‘shalom )אטום

list?(list? ‘(a b c) )רשימה

number?(number? ‘shalom ) מספר

even?(even? 99) מספר זוגי (פועל רק עלמספרים)

odd?(odd? 99) מספר אי-זוגי (פועל רק עלמספרים)

integer?(integer? -99) מספר שלם (פועל רק עלמספרים)

positive?(positive? -6.87) מספר חיובי (פועל רק עלמספרים)

negative?(negative? -6.87) מספר שלילי (פועל רק עלמספרים)

zero?(zero? -0.25)(פועל רק על מספרים) אפס

Page 26: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - פונקציות יסוד לוגיות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(

שם הפונקצ

יה

אם הארגומנט הוא t#מוחזר דוגמה

equal?(equal? ‘(a b) ‘(c a) )

שני ארגומנטים זהים

and(and #t ( = 4 5 ) ) .וגם אם כל הארגומנטים t#מחזיר

t#הם

or(or #f ( = 4 4 ) ) או. מחזיר#t אם לפחות אחד t#הארגומנטים הוא

not(not ( = 4 5 ) ) לא. הופך את ערך הארגומנט ולהיפךf# ל- t#מ-

Page 27: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - קשרים לוגיים )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(

:משמשים להרכבת פונקציות לוגיות

הפונקציהand וגם"( מחזירה את הערך"( #t אך ורק אם )אמת( . בכל מקרה אחר, מוחזר הערך t# שלה כל הפרמטריםערכם של

#f .)שקר(

הפונקציהor בעברית "או"( מחזירה את הערך( #t אם )אמת( . בכל מקרה אחר, t# פרמטר אחד שערכו לפחותהיא מקבלת )שקר(. f#מוחזר הערך

הפונקציהnot )"את הערך הלוגי שהיא מקבלת - הופכת )"לא f# )אמת( אם ערך הפרמטר שלה הוא t#היא מחזירה

.t#)שקר( אם ערך הפרמטר שלה f#ומחזירה

Page 28: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - הוראות תנאי)מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(

:מבנה

(cond1ערך מוחזר 1תנאי ] ]2ערך מוחזר 2תנאי ] ]

. .

. [else ערך מוחזר] )

Page 29: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - הוראות תנאי, דוגמא

)define (sign n()cond

[(> n 0) '+] [(< n 0) '-] [(= n 0) '0]))

< (sign 7)+> (sign -78)-< (sign 0)0

Page 30: תכנות פונקציונאלי -   I

תכנות פונקציונאלי - הוראות תנאי )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית )המשך(

נוספת(

cond קיצור של - condition.)תנאי(

הוראת התנאיcond .יכולה להכיל תנאי אחד או יותר

(.f# או t#לכל תנאי יש ערך לוגי )

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

.בעת הביצוע, מחושבים התנאים על פי סדר הופעתם

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

. elseאם אף תנאי לא מתקיים, מוחזר הערך שבשורת ה-

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

Page 31: תכנות פונקציונאלי -   I

הדגמת סביבת העבודה

תרגול