Standard ML: განსხვავება გადახედვებს შორის

[შეუმოწმებელი ვერსია][შეუმოწმებელი ვერსია]
შიგთავსი ამოიშალა შიგთავსი დაემატა
Bot: 15 ენათაშორისი ბმული გადატანილია Wikidata_ზე, d:q597330
No edit summary
ხაზი 40:
 
ფაქტორიალი:
'''fun''' factorial 0 = 1
 
| factorial n = n * factfactorial (n-1)
<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="ocaml">
fun fact 0 = 1
n = n * fact(n-1)
</source>
</div>
 
დახარისხების [[ალგორითმი]] Quicksort-ი
 
'''fun''' quicksort << xs = '''let'''
<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
'''fun''' qs [] = []
<source lang="ocaml">
<nowiki> | qs [x] = [x]
val filt = List.filter
fun quicksort << | qs (p::xs) = </nowiki>'''let'''
'''val''' (less, more) = List.partition ('''fn''' x => << (x, p)) xs
fun qs [] = []
| qs [x] = [x] '''in'''
| qs (less @ p ::xs) =qs letmore
val lessThanP = (fn x => << (x, p))'''end'''
'''in'''
qs xs
qs (filt lessThanP xs) @ p :: (qs (filt (not o lessThanP) xs))
'''end'''
in
qs xs
end
</source>
</div>
 
მოკლე ენის მაგალითი, დააკვირდით რა მარტივად არის შექმნილი.
 
'''exception''' Err
<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="ocaml">
'''datatype''' ty
exception Err
= IntTy
 
| BoolTy
datatype ty
= IntTy
'''datatype''' exp
| BoolTy
= True
 
| False
datatype exp
| Int '''of''' int
= True
<nowiki> | Not </nowiki>'''of''' exp
| False
<nowiki> | Add </nowiki>'''of''' exp * exp
| Int of int
<nowiki> | NotIf </nowiki>'''of''' exp * exp * exp
| Add of exp * exp
'''fun''' evaltypeOf (True) = TrueBoolTy
| If of exp * exp * exp
<nowiki> |</nowiki> typeOf (False) = BoolTy<nowiki>
 
fun |</nowiki> typeOf (TrueInt _) = BoolTyIntTy<nowiki>
|</nowiki> typeOf (FalseNot e) = '''if''' typeOf e = BoolTy '''then''' BoolTy '''else''' '''raise''' Err
<nowiki> |</nowiki> typeOf (IntAdd _(e1, e2)) = IntTy
| typeOf '''if''' (NottypeOf e)e1 = ifIntTy) '''andalso''' (typeOf ee2 = BoolTyIntTy) '''then''' BoolTyIntTy '''else''' '''raise''' Err
<nowiki> |</nowiki> typeOf (AddIf (e1, e2, e3)) =
'''if''' (typeOf e1 =<> IntTy) andalso (typeOf e2 = IntTy)BoolTy '''then''' IntTy else '''raise''' Err
'''else''' '''if''' typeOf e2 <> typeOf e3 '''then''' '''raise''' Err
| typeOf (If (e1, e2, e3)) =
if '''else''' typeOf e1 <> BoolTy then raise Erre2
else if typeOf e2 <> typeOf e3 then raise Err
|'''fun''' eval (Not eTrue) = True
else typeOf e2
<nowiki> |</nowiki> eval (False) = False<nowiki>
|</nowiki> eval (Int n) = Int n<nowiki>
|</nowiki> eval (AddNot (e1, e2)e) = let
<nowiki> (</nowiki>'''case''' eval e
'''of''' True => False
<nowiki> | False => True
| _ => </nowiki>'''raise''' Fail "type-checking is broken")
<nowiki> |</nowiki> eval (IfAdd (e1, e2, e3)) = '''let'''
'''val''' (Int n1) = eval e1
'''val''' (Int n2) = eval e2
'''in'''
Int (n1 + n2)
'''end'''
| typeOfeval (If (e1, e2, e3)) =
'''if''' eval e1 = True '''then''' eval e2 '''else''' eval e3
'''fun''' chkEval e = (ignore (typeOf e); eval e) ''(* will raise Err on type error *)''
fun eval (True) = True
| eval (False) = False
| eval (Int n) = Int n
| eval (Not e) =
(case eval e
of True => False
| False => True
| _ => raise Fail "type-checking is broken")
| eval (Add (e1, e2)) = let
val (Int n1) = eval e1
val (Int n2) = eval e2
in
Int (n1 + n2)
end
| eval (If (e1, e2, e3)) =
if eval e1 = True then eval e2 else eval e3
 
fun chkEval e = (ignore (typeOf e); eval e) (* will raise Err on type error *)
</source>
</div>
 
 
მოძიებულია „https://ka.wikipedia.org/wiki/Standard_ML“-დან