הנחיות לפרויקט המסכם - יחידת תכנות פונקציונלי תשס"ד

 

1.   הפרויקט יכלול לפחות 15 פונקציות משמעותיות.

פונקציה משמעותית היא פונקציה רקורסיבית, או פונקציה הכוללת קריאה לשתי פונקציות משתמש לפחות בביטוי מורכב. למען ההבהרה, הפונקציה הבאה תחשב כפונקציה משמעותית:

(define (start )

  (game (mix ( pack) ) )

אולם הפונקציה הבאה לא תחשב כפונקציה משמעותית:

(define (continue answer)

(cond

              [(equal answer ‘y ) (start)]

              [(equal answer ‘n ) (finish)]

              [else (wrong_answer) ] ) )

2.   הפרויקט יכלול טיפול בקלט ובמסננת קלט.

3.  הפרויקט יכלול לפחות 4 פונקציות רקורסיביות. מביניהן, פונקציה אחת לפחות תזמן פונקציה לבניית רשימה (cons) ואחד מהפרמטרים של הפונקציה cons יהיה הקריאה הרקורסיבית.. למשל:     ( ) קריאה רקורסיבית (cons  ( first L ) (

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

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

5.   הפרויקט יורכב מפונקציות מודולריות, קצרות (לא יותר משליש עמוד לפונקציה), וממצות (כל פונקציה תבצע פעולה מוגדרת אחת בלבד).

6.   גוף הפונקציה יהיה ביטוי מורכב אחד ויחיד. להוציא מקרים של הוראות הדפסה או זימונים לפונקציה שמבצעת הדפסות בלבד. למען ההבהרה: השימוש ב- Begin יהיה לצורך הדפסות בלבד.

7.   יש לתת שמות משמעותיים לפונקציות ולפרמטרים.

8.   יש להימנע מקינון של הוראת התנאי cond.

9.   מומלץ מאד להימנע בפרויקט ממבנה שרוך.

10. תדפיס התכנית: יש לשמור על כללי אינדנצטיה (הזחה). לדוגמה,

(define  (sum-all  L)

    (cond

            [ ( empty?  L )  0 ]

            [ else   ( +  ( first  L )  ( sum-all   ( rest   L ) ) ) ] ) )

 

·   יש לדאוג לשורת רווח לפני הגדרה של כל פונקציה.

·  סדר הופעת הפונקציות ב- listing של התכנית לא יהיה אקראי. סדר מומלץ: לפי סדר הרמות בעץ הקריאות או א"ב של שמות הפונקציות.