25 lines
880 B
Text
25 lines
880 B
Text
val test_array = ["123","12345","1234567","987654321","10001","~10001","~123","~100","100","~12345","1","2","~1","~10","2002","~2002","0"];
|
|
|
|
fun even (x rem 2 = 0) = true | _ = false;
|
|
|
|
fun middleThreeDigits
|
|
(h :: t, s, 1 ) = s @ " --> too small"
|
|
| (h :: t, s, 2 ) = s @ " --> has even digits"
|
|
| (h :: t, s, 3 ) where (len (h :: t) = 3) = s @ " --> " @ (implode (h :: t))
|
|
| (h :: t, s, 3 ) = (middleThreeDigits ( sub (t, 0, (len t)-1), s, 3))
|
|
| (h :: t, s, m) = if len (h :: t) < 3 then
|
|
middleThreeDigits (h :: t, s, 1)
|
|
else
|
|
if even ` len (h :: t) then
|
|
middleThreeDigits (h :: t, s, 2)
|
|
else
|
|
middleThreeDigits (h :: t, s, 3)
|
|
|
|
|
|
| s = if sub (s, 0, 1) = "~" then
|
|
middleThreeDigits (sub (explode s, 1, len s), s, 0)
|
|
else
|
|
middleThreeDigits (explode s, s, 0)
|
|
;
|
|
|
|
map (println o middleThreeDigits) test_array;
|