ML (שפת תכנות) – הבדלי גרסאות
תוכן שנמחק תוכן שנוסף
מ החלפת תג source לתג syntaxhighlight* |
תיקון קישור לפירושונים |
||
שורה 22:
ML נחשבת לשפה פונקציונלית שאיננה 'טהורה', בשל העובדה שהיא מאפשרת תוצאות לוואי בקריאות לפונקציות, בשונה משפות פונקציונליות 'טהורות' כגון [[Haskell]].
מאפייני השפה כוללים העברת פרמטרים על פי ערכם, [[פונקציה (תכנות)|פונקציות]] כטיפוסים "ממחלקה ראשונה", ניהול זיכרון אוטומטי בעזרת מנגנון [[איסוף זבל]], [[מדעי המחשב|פולימורפיזם]] פרמטרי (כלומר פולימורפיזם בקריאה לפונקציות), [[מערכת טיפוסים|טיפוסיות]] חזקה וסטטית, מנגנון הסקת טיפוסים ו[[טיפול בחריגות (תכנות)|טיפול בחריגות]].
בשונה משפת Haskell,{{כ}} ML נוקטת בחישוב ביטויים מוקדם (Eager evaluation). עם זאת, חישוב ביטויים עצל (Lazy evaluation) ניתן להשגה באמצעות מנגנון סְגוֹר (Closure).
שורה 39:
<syntaxhighlight lang="ocaml">
fun fac (0 : int) : int = 1
</syntaxhighlight>
שורה 57:
<syntaxhighlight lang="ocaml">
fun fact n = let
| fac n = n * fac (n - 1)
</syntaxhighlight>
שורה 70:
<syntaxhighlight lang="ocaml">
fun factorial n = let
| fac (n, acc) = fac (n - 1, n*acc)
</syntaxhighlight>
|