(*
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
if num <= 0 then
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 = <intmap> : 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
-
****)
KCoKICAgIFN3aWZ0J3MgY2xvc3VyZQogICAgICAgIGh0dHBzOi8vZC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jb20vbGlicmFyeS9pb3MvZG9jdW1lbnRhdGlvbi9Td2lmdC9Db25jZXB0dWFsL1N3aWZ0X1Byb2dyYW1taW5nX0xhbmd1YWdlL0Nsb3N1cmVzLmh0bWwKKikKCgpsb2FkICJJbnRtYXAiOyAgKCogZm9yIE1vc2NvdyBNTCAqKQoKCnZhbCBkaWdpdE5hbWVzID0gZm9sZHIKICAgIChmbiAoKGksIHMpLCBtKSA9PiBJbnRtYXAuaW5zZXJ0IChtLCBpLCBzKSkKICAgIChJbnRtYXAuZW1wdHkgKCkpCiAgICBbCiAgICAgICAgKDAsICJaZXJvIiksICgxLCAiT25lIiksICgyLCAiVHdvIiksICAgKDMsICJUaHJlZSIpLCAoNCwgIkZvdXIiKSwKICAgICAgICAoNSwgIkZpdmUiKSwgKDYsICJTaXgiKSwgKDcsICJTZXZlbiIpLCAoOCwgIkVpZ2h0IiksICg5LCAiTmluZSIpCiAgICBdCnZhbCBudW1iZXJzID0gWzE2LCA1OCwgNTEwXQoKCnZhbCBzdHJpbmdzID0gbWFwCiAgICAoCiAgICAgICAgZm4gbnVtYmVyID0+IGxldAogICAgICAgICAgICBmdW4gZiBudW0gb3V0cHV0ID0KICAgICAgICAgICAgICAgIGlmIG51bSA8PSAwIHRoZW4KICAgICAgICAgICAgICAgICAgICBvdXRwdXQKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBmCiAgICAgICAgICAgICAgICAgICAgICAgIChudW0gZGl2IDEwKQogICAgICAgICAgICAgICAgICAgICAgICAoSW50bWFwLnJldHJpZXZlIChkaWdpdE5hbWVzLCBudW0gbW9kIDEwKSBeIG91dHB1dCkgCiAgICAgICAgaW4KICAgICAgICAgICAgZiBudW1iZXIgIiIKICAgICAgICBlbmQKICAgICkKICAgIG51bWJlcnMKCgpmdW4gcHJpbnRfc3RyaW5ncyB4cyA9ICgKICAgIChtYXAgKGZuIHMgPT4gKHByaW50IChzIF4gIlxuIikgOyAoKSkpIHhzKSA7CiAgICAoKQopCgoKCigqKioqCgokIG1vc21sIG51bWJlcnMtbWFwLnNtbApNb3Njb3cgTUwgdmVyc2lvbiAyLjAxIChKYW51YXJ5IDIwMDQpCkVudGVyIGBxdWl0KCk7JyB0byBxdWl0Lgpbb3BlbmluZyBmaWxlICJudW1iZXJzLW1hcC5zbWwiXQo+IHZhbCBpdCA9ICgpIDogdW5pdAo+IHZhbCBkaWdpdE5hbWVzID0gPGludG1hcD4gOiBzdHJpbmcgaW50bWFwCiAgdmFsIG51bWJlcnMgPSBbMTYsIDU4LCA1MTBdIDogaW50IGxpc3QKICB2YWwgc3RyaW5ncyA9IFsiT25lU2l4IiwgIkZpdmVFaWdodCIsICJGaXZlT25lWmVybyJdIDogc3RyaW5nIGxpc3QKICB2YWwgcHJpbnRfc3RyaW5ncyA9IGZuIDogc3RyaW5nIGxpc3QgLT4gdW5pdApbY2xvc2luZyBmaWxlICJudW1iZXJzLW1hcC5zbWwiXQotIHByaW50X3N0cmluZ3Mgc3RyaW5nczsKT25lU2l4CkZpdmVFaWdodApGaXZlT25lWmVybwo+IHZhbCBpdCA9ICgpIDogdW5pdAotCgoqKioqKQ==