Standard ML: განსხვავება გადახედვებს შორის
[შეუმოწმებელი ვერსია] | [შეუმოწმებელი ვერსია] |
შიგთავსი ამოიშალა შიგთავსი დაემატა
მ Bot: 15 ენათაშორისი ბმული გადატანილია Wikidata_ზე, d:q597330 |
No edit summary |
||
ხაზი 40:
ფაქტორიალი:
'''fun''' factorial 0 = 1
▲ n = n * fact(n-1)
დახარისხების [[ალგორითმი]] Quicksort-ი
'''fun''' quicksort << xs = '''let'''
'''fun''' qs [] = []▼
<nowiki> | qs [x] = [x]
'''val''' (less, more) = List.partition ('''fn''' x => << (x, p)) xs
▲ fun qs [] = []
qs xs▼
▲ qs xs
მოკლე ენის მაგალითი, დააკვირდით რა მარტივად არის შექმნილი.
'''exception''' Err▼
▲exception Err
= IntTy▼
| BoolTy▼
▲ datatype ty
▲ = IntTy
▲ | 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> |
▲ | Add of exp * exp
<nowiki> |</nowiki> typeOf (False) = BoolTy<nowiki>
|</nowiki> typeOf (
<nowiki> |</nowiki> typeOf (
<nowiki> |</nowiki> typeOf (
'''if'''
'''else''' '''if''' typeOf e2 <> typeOf e3 '''then''' '''raise''' Err▼
| typeOf (If (e1, e2, e3)) = ▼
▲ else if typeOf e2 <> typeOf e3 then raise Err
<nowiki> |</nowiki> eval (False) = False<nowiki>▼
|</nowiki> eval (Int n) = Int n<nowiki>▼
<nowiki> (</nowiki>'''case''' eval e▼
'''of''' True => False▼
<nowiki> | False => True▼
| _ => </nowiki>'''raise''' Fail "type-checking is broken")▼
'''val''' (Int n1) = eval e1▼
'''val''' (Int n2) = eval e2▼
'''in'''▼
Int (n1 + n2)▼
'''end'''▼
'''if''' eval e1 = True '''then''' eval e2 '''else''' eval e3▼
▲ 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 *)
|