Upload
nell-henson
View
51
Download
3
Embed Size (px)
DESCRIPTION
תכנות פונקציונאלי - I. מבוא. תכנות פונקציונאלי. הפרדיגמה צמחה בשנות ה- 60 בהקשר לאינטליגנציה מלאכותית. פעילות התכנות נתפסת כפעולת פונקציות עם קלט ופלט: אין הוראות השמה במקום לולאות משתמשים ברקורסיה שפות תכנות השייכות לפרדיגמה הפונקציונלית מספקות בדרך-כלל: מבנה נתונים יחיד - PowerPoint PPT Presentation
Citation preview
I - תכנות פונקציונאלי
מבוא
תכנות פונקציונאלי
-בהקשר לאינטליגנציה מלאכותית. 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תכנות פונקציונאלי – שיעור
פונקציות יסוד מספריות
פונקציות יסוד לרשימות
פונקציות יסוד לוגיות
הוראות תנאי
הגדרת פונקציות
תכנות פונקציונאלי - פונקציות יסוד מספריות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(
שם הפונקצ
יה
ערך הפונקציהדוגמה
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עיגול
תכנות פונקציונאלי - פונקציות יסוד מספריות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(
שם הפונקציה
ערך הפונקציהדוגמה
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 (
תכנות פונקציונאלי - פונקציות יסוד מספריות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(
בנוסף, ניתן להשתמש בארבע פעולות החשבון
/ * - +
דוגמה
( + 5 ( - 9 8 ) ( * 2 10 ) ( / 90 3 ) ) 56
תכנות פונקציונאלי - פונקציות יסוד לרשימות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(
שם הפונקצ
יה
הערך המוחזרדוגמה
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הראשון הוא
תכנות פונקציונאלי - פונקציות יסוד לרשימות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(
שם הפונקציה
הערך המוחזרדוגמה
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#רשימה ומחזירה
הרשימה ריקה
תכנות פונקציונאלי - פונקציות יסוד לוגיות
)מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(
היא פונקציה שמחזירה אחד פונקציה לוגית
)שקר(f# )אמת( או t#משני ערכים -
ניתן להשתמש בפעולות ההשוואה
<= , >= , > , < , =
מומלץ לסמן פונקציה כזו על ידי תוספת של
סימן שאלה בסוף שמה
תכנות פונקציונאלי - פונקציות יסוד לוגיות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(
שם הפונקציה
אם הארגומנט 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)(פועל רק על מספרים) אפס
תכנות פונקציונאלי - פונקציות יסוד לוגיות )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת( )המשך(
שם הפונקצ
יה
אם הארגומנט הוא 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#מ-
תכנות פונקציונאלי - קשרים לוגיים )מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(
:משמשים להרכבת פונקציות לוגיות
הפונקציהand וגם"( מחזירה את הערך"( #t אך ורק אם )אמת( . בכל מקרה אחר, מוחזר הערך t# שלה כל הפרמטריםערכם של
#f .)שקר(
הפונקציהor בעברית "או"( מחזירה את הערך( #t אם )אמת( . בכל מקרה אחר, t# פרמטר אחד שערכו לפחותהיא מקבלת )שקר(. f#מוחזר הערך
הפונקציהnot )"את הערך הלוגי שהיא מקבלת - הופכת )"לא f# )אמת( אם ערך הפרמטר שלה הוא t#היא מחזירה
.t#)שקר( אם ערך הפרמטר שלה f#ומחזירה
תכנות פונקציונאלי - הוראות תנאי)מקור: תכנות פונקציונאלי, פרדיגמה תכנותית נוספת(
:מבנה
(cond1ערך מוחזר 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 .יכולה להכיל תנאי אחד או יותר
(.f# או t#לכל תנאי יש ערך לוגי )
בעזרת קשרים לוגיים(.תנאי יכול להיות ביטוי פשוט או מורכב(
.בעת הביצוע, מחושבים התנאים על פי סדר הופעתם
אם תנאי מתקיים, מוחזר הערך המתאים לו והחישוב נפסק.
. elseאם אף תנאי לא מתקיים, מוחזר הערך שבשורת ה-
.הערך המוחזר יכול להיות גם תוצאת חישוב של פונקציה
הדגמת סביבת העבודה
תרגול