fork download
  1. (*
  2.   Swift's closure
  3.   https://d...content-available-to-author-only...e.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
  4. *)
  5.  
  6.  
  7. load "Intmap"; (* for Moscow ML *)
  8.  
  9.  
  10. val digitNames = foldr
  11. (fn ((i, s), m) => Intmap.insert (m, i, s))
  12. (Intmap.empty ())
  13. [
  14. (0, "Zero"), (1, "One"), (2, "Two"), (3, "Three"), (4, "Four"),
  15. (5, "Five"), (6, "Six"), (7, "Seven"), (8, "Eight"), (9, "Nine")
  16. ]
  17. val numbers = [16, 58, 510]
  18.  
  19.  
  20. val strings = map
  21. (
  22. fn number => let
  23. fun f num output =
  24. if num <= 0 then
  25. else
  26. f
  27. (num div 10)
  28. (Intmap.retrieve (digitNames, num mod 10) ^ output)
  29. in
  30. f number ""
  31. end
  32. )
  33. numbers
  34.  
  35.  
  36. fun print_strings xs = (
  37. (map (fn s => (print (s ^ "\n") ; ())) xs) ;
  38. ()
  39. )
  40.  
  41.  
  42.  
  43. (****
  44.  
  45. $ mosml numbers-map.sml
  46. Moscow ML version 2.01 (January 2004)
  47. Enter `quit();' to quit.
  48. [opening file "numbers-map.sml"]
  49. > val it = () : unit
  50. > val digitNames = <intmap> : string intmap
  51.   val numbers = [16, 58, 510] : int list
  52.   val strings = ["OneSix", "FiveEight", "FiveOneZero"] : string list
  53.   val print_strings = fn : string list -> unit
  54. [closing file "numbers-map.sml"]
  55. - print_strings strings;
  56. OneSix
  57. FiveEight
  58. FiveOneZero
  59. > val it = () : unit
  60. -
  61.  
  62. ****)
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
File "prog.ml", line 10, characters 0-3:
Syntax error
stdout
Standard output is empty