310 likes | 522 Views
תכנות פונקציונאלי - I. מבוא. תכנות פונקציונאלי. הפרדיגמה צמחה בשנות ה- 60 בהקשר לאינטליגנציה מלאכותית. פעילות התכנות נתפסת כפעולת פונקציות עם קלט ופלט: אין הוראות השמה במקום לולאות משתמשים ברקורסיה שפות תכנות השייכות לפרדיגמה הפונקציונלית מספקות בדרך-כלל: מבנה נתונים יחיד
E N D
תכנות פונקציונאלי • הפרדיגמה צמחה בשנות ה- 60 בהקשר לאינטליגנציה מלאכותית. • פעילות התכנות נתפסת כפעולת פונקציות עם קלט ופלט: • אין הוראות השמה • במקום לולאות משתמשים ברקורסיה • שפות תכנות השייכות לפרדיגמה הפונקציונלית מספקות בדרך-כלל: • מבנה נתונים יחיד • פונקציות יסוד לעיבוד מבנה הנתונים • אמצעים לבניית פונקציות חדשות • פונקציות הן אובייקטים מסדר ראשון • השפה שבאמצעותה נכיר את הפרדיגמה: DrSchme
תכנות פונקציונאלי - דוגמאות • (abs (+ 7 -8 5 0 1 -10))
תכנות פונקציונאלי - דוגמאות • (abs (+ 7 -8 5 0 1 -10)) 5
תכנות פונקציונאלי - דוגמאות • (abs (+ 7 -8 5 0 1 -10)) 5 • (abs (+ 7 -8 5 0 1 -10 (add1 8)))
תכנות פונקציונאלי - דוגמאות • (abs (+ 7 -8 5 0 1 -10)) 5 • (abs (+ 7 -8 5 0 1 -10 (add1 8))) 4
תכנות פונקציונאלי - דוגמאות • (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))))
תכנות פונקציונאלי - דוגמאות • (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
תכנות פונקציונאלי - דוגמאות • (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)
תכנות פונקציונאלי - דוגמאות • (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
תכנות פונקציונאלי - דוגמאות • (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)
תכנות פונקציונאלי - דוגמאות • (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
תכנות פונקציונאלי • סיכום ביניים 1 - מאפיינים עד כה: • הרכבת פונקציות • Prefix • מבנה אחיד של ביטויים parameter 2 …)(function parameter 1
תכנות פונקציונאלי – עיבוד רשימות, דוגמאות • >(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)
תכנות פונקציונאלי – עיבוד רשימות, דוגמאות • > (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
תכנות פונקציונאלי • סיכום ביניים 2 – עיבוד רשימות: • רשימות • פעולות פירוק • פעולות הרכבה
תכנות פונקציונאלי - משימות • רשמו שני ביטויים שלדעתכם ניתן לבנות בשפה. על כל ביטוי לכלול לפחות שלוש פונקציות. • בדקו את הביטויים על המחשב. • לאיזה סוג בעיות מתאים לדעתכם להשתמש בסוג חשיבה כזה?
תכנות פונקציונאלי – שיעור 1 • פונקציות יסוד מספריות • פונקציות יסוד לרשימות • פונקציות יסוד לוגיות • הוראות תנאי • הגדרת פונקציות
תכנות פונקציונאלי - פונקציות יסוד מספריות (מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת)
תכנות פונקציונאלי - פונקציות יסוד מספריות (המשך)(מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת)
תכנות פונקציונאלי - פונקציות יסוד מספריות (המשך)(מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת) • בנוסף, ניתן להשתמש בארבע פעולות החשבון + - * / • דוגמה • ( + 5 ( - 9 8 ) ( * 2 10 ) ( / 90 3 ) ) 56
תכנות פונקציונאלי - פונקציות יסוד לרשימות (מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת)
תכנות פונקציונאלי - פונקציות יסוד לרשימות (המשך)(מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת)
תכנות פונקציונאלי - פונקציות יסוד לוגיות (מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת) • פונקציה לוגית היא פונקציה שמחזירה אחד משני ערכים - #t (אמת) או #f (שקר) • ניתן להשתמש בפעולות ההשוואה = , < , > , => , =< • מומלץ לסמן פונקציה כזו על ידי תוספת של סימן שאלה בסוף שמה
תכנות פונקציונאלי - פונקציות יסוד לוגיות (המשך)(מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת)
תכנות פונקציונאלי - פונקציות יסוד לוגיות (המשך)(מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת)
תכנות פונקציונאלי - קשרים לוגיים (מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת) • משמשים להרכבת פונקציות לוגיות: • הפונקציה and ("וגם") מחזירה את הערך #t (אמת) אך ורק אם ערכם של כל הפרמטרים שלה #t. בכל מקרה אחר, מוחזר הערך #f (שקר). • הפונקציה or (בעברית "או") מחזירה את הערך #t (אמת) אם היא מקבלת לפחות פרמטר אחד שערכו #t. בכל מקרה אחר, מוחזר הערך #f (שקר). • הפונקציה not ("לא") הופכת את הערך הלוגי שהיא מקבלת - היא מחזירה #t (אמת) אם ערך הפרמטר שלה הוא #f ומחזירה#f (שקר) אם ערך הפרמטר שלה #t.
תכנות פונקציונאלי - הוראות תנאי(מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת) • מבנה: (cond [ תנאי1ערך מוחזר1] [ תנאי2ערך מוחזר 2] . . . [else ערך מוחזר] )
תכנות פונקציונאלי - הוראות תנאי, דוגמא )define (sign n( )cond [(> n 0) '+] [(< n 0) '-] [(= n 0) '0])) < (sign 7) + > (sign -78) - < (sign 0) 0
תכנות פונקציונאלי - הוראות תנאי (המשך) (מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת) • cond - קיצור של condition (תנאי). • הוראת התנאי cond יכולה להכיל תנאי אחד או יותר. לכל תנאי יש ערך לוגי (#t או #f). • תנאי יכול להיות ביטוי פשוט או מורכב (בעזרת קשרים לוגיים). • בעת הביצוע, מחושבים התנאים על פי סדר הופעתם. אם תנאי מתקיים, מוחזר הערך המתאים לו והחישוב נפסק. אם אף תנאי לא מתקיים, מוחזר הערך שבשורת ה- else. • הערך המוחזר יכול להיות גם תוצאת חישוב של פונקציה.
הדגמת סביבת העבודה • תרגול