fun digits n = let val p = n div 10 in if p=0 then 1 else 1 + digits p end; fun sum n = let fun dig n = let val x = n mod 10 val y = n div 10 in if x=0 andalso y=0 then 0 else x+(dig y) end; in n + dig n end; fun isself i = let fun self_aux i x = if xsum x) then self_aux i (x+1) else 1 val tmp = i - 9*(digits i) in if tmp<=0 then self_aux i 0 else self_aux i tmp end; fun self i j = if i<=j then (self (i+1) j) + (isself i) else 0; val args = CommandLine.arguments (); val n1 = valOf (Int.fromString (List.nth (args, 0))); val n2 = valOf (Int.fromString (List.nth (args, 1)));