(* Swift's closure https://d...content-available-to-author-only...e.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html *) load "Intmap"; (* for Moscow ML *) val digitNames = foldr (fn ((i, s), m) => Intmap.insert (m, i, s)) (Intmap.empty ()) [ (0, "Zero"), (1, "One"), (2, "Two"), (3, "Three"), (4, "Four"), (5, "Five"), (6, "Six"), (7, "Seven"), (8, "Eight"), (9, "Nine") ] val numbers = [16, 58, 510] val strings = map ( fn number => let fun f num output = if num <= 0 then output else f (num div 10) (Intmap.retrieve (digitNames, num mod 10) ^ output) in f number "" end ) numbers fun print_strings xs = ( (map (fn s => (print (s ^ "\n") ; ())) xs) ; () ) (**** $ mosml numbers-map.sml Moscow ML version 2.01 (January 2004) Enter `quit();' to quit. [opening file "numbers-map.sml"] > val it = () : unit > val digitNames = : string intmap val numbers = [16, 58, 510] : int list val strings = ["OneSix", "FiveEight", "FiveOneZero"] : string list val print_strings = fn : string list -> unit [closing file "numbers-map.sml"] - print_strings strings; OneSix FiveEight FiveOneZero > val it = () : unit - ****)