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;