ML (שפת תכנות) – הבדלי גרסאות
תוכן שנמחק תוכן שנוסף
התחלה: תרגום מאנגלית. מוכן למרחב הערכים, אני חושב. |
מ ←עצרת: עיצוב |
||
שורה 54:
המימוש הזה של פונקציית העצרת איננו מובטח שיעצור, כיוון שארגומנט שלילי יגרום לשרשרת אינסופית של קריאות רקורסיביות. מימוש יציב יותר יבדוק שהארגומנט הינו אי-שלילי, בצורה הבאה:
<div style="direction: ltr;">
fun fact n = let
המקרה הבעייתי (מספר שלילי) מנוהל בעזרת מנגנון ה[[טיפול בחריגות (תכנות)|טיפול בחריגות]] של השפה.
הפונקציה יכולה להיכתב בצורה יעילה יותר על ידי שימוש ברקורסיית-זנב, כלומר רקורסיה שבה לא מבוצע כל חישוב לאחר הקריאה הרקורסיבית בפונקציה הקוראת, וה[[מחסנית (מבנה נתונים)]] לא תצטרך לגדול ביחס ישר למספר הקריאות לפונקציה. זאת ניתן להשיג בעזרת שימוש פרמטר נוסף, "צובר" (Accumulator) עבור הפונקציה הפנימית:
<div style="direction: ltr;">
fun factorial n = let
==ראו גם==
|