שפות תכנות

מוסד לימוד
סוג העבודה
מספר ממ"ן 11
מקצוע
מילות מפתח ,
ציון 100
שנת הגשה 2022
מספר מילים 100
מספר מקורות -1

תקציר העבודה

שאלה 1) 20 נקודות)
כתבו פרוצדורה בשם flatten_my המקבלת רשימה כפרמטר. הפרוצדורה מחזירה את
תוצאת שיטוח הרשימה.
להלן דוגמא:
>(my_flatten '( (1 2) ((3)) (4 5 6)))
'(1 2 3 4 5 6)
שאלה 2) 30 נקודות)
א) כתבו פרוצדורה בשם count_my המקבלת כפרמטרים פרדיקט ורשימה.
הפרוצדורה מחזירה כמה איברים ברשימה מקיימים את הפרדיקט.
להלן דוגמה:
>(my_count positive? '(1 3 -7 9 -2))
3
את הפרוצדורה ממשו באמצעות רקורסיה.
ב) כתבו פרוצדורה בשם foldr_count_my המחזירה תוצאה זהה לזו של count_my ,
הפעם ממשו אותה באמצעות שימוש ב- foldr וללא שימוש ברקורסיה (כלומר,
במימוש לא תופיע קריאה ישירה לפרוצדורה אותה אתם נדרשים לממש).
6
שאלה 3) 20 נקודות)
כתבו פרוצדורה בשם partition_my המקבלת פרדיקט ורשימה כפרמטרים. הפרוצדורה מחזירה
רשימה המורכבת מ-2 תתי רשימות, האחת תכיל איברים שקיימו את הפרדיקט, והשניה איברים
שלא קיימו את הפרדיקט.
לדוגמה:
> (my_partition even? '(1 2 3 4 5 6))
'( (2 4 6) (1 3 5))
שאלה 4) 30 נקודות)
כתבו פרוצדורה בשם permutations_my המקבלת כפרמטר רשימה. הפרוצדורה תחזיר את
קבוצת כל התמורות (פרמוטציות) של איברי הרשימה. התשובה המוחזרת תהיה רשימה של תתי
רשימות, כאשר כל תת-רשימה מייצגת את אחת התמורות.
לדוגמה:
> (my_permutations '(1 2 3))
'( (1 2 3) (2 1 3) (1 3 2) (3 1 2) (2 3 1) (3 2 1)