RosettaCodeData/Task/Middle-three-digits/MLite/middle-three-digits.mlite
2023-07-01 13:44:08 -04:00

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;