ML (שפת תכנות) – הבדלי גרסאות

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