3 fun digit n
= chr(ord #
"0" + n
)
5 if n
>=0 andalso n
<=9 then digit n
:: acc
6 else digits (n
div 10, digit(n
mod 10) :: acc
)
8 fun int_to_string(n
) = implode(digits(n
,[]))
10 fun rev l
= (* linear
-time reversal
of lists
! *)
11 let fun loop([], acc
) = acc
12 |
loop(x
::xs
, acc
) = loop(xs
, x
::acc
)
18 | foldR f
b (x
::xs
) = f
x (foldR f b xs
)
20 fun curry f x y
= f(x
,y
)
22 datatype 'a Option
= None | Some
of 'a
25 datatype 'a tree
= Lf | Br
of 'a
* 'a tree
* 'a tree
27 fun max(i
:int, j
) = if i
>j
then i
else j
28 fun member(x
,[]) = false
29 |
member(x
,x
'::rest
) = x
=x
' orelse member(x
, rest
)
31 fun search p Lf
= false
32 | search
p (Br(x
,t1
,t2
)) =
33 if member(x
,p
) then true
34 else search (x
::p
) t1
orelse
38 | mk_tree n
= let val t
= mk_tree(n
-1)
41 val it
= if search
[] (mk_tree
20)