# Swift's closure
# https://d...content-available-to-author-only...e.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
require 'continuation' # Need for Ruby 1.9 or later
DigitNames = {
0 => "Zero", 1 => "One", 2 => "Two", 3 => "Three", 4 => "Four",
5 => "Five", 6 => "Six", 7 => "Seven", 8 => "Eight", 9 => "Nine"
}
Numbers = [16, 58, 510]
strings = Numbers.map { |number|
callcc { |continuation|
loop.inject([number, '']) { |(num, output), _|
if num > 0
[num / 10, DigitNames[num % 10] + output]
else
continuation.call output
end
}
}
}
for s in strings
puts s
end
IyBTd2lmdCdzIGNsb3N1cmUKIyAgIGh0dHBzOi8vZC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jb20vbGlicmFyeS9pb3MvZG9jdW1lbnRhdGlvbi9Td2lmdC9Db25jZXB0dWFsL1N3aWZ0X1Byb2dyYW1taW5nX0xhbmd1YWdlL0Nsb3N1cmVzLmh0bWwKCgpyZXF1aXJlICdjb250aW51YXRpb24nICAjIE5lZWQgZm9yIFJ1YnkgMS45IG9yIGxhdGVyCgoKRGlnaXROYW1lcyA9IHsKICAgIDAgPT4gIlplcm8iLCAxID0+ICJPbmUiLCAyID0+ICJUd28iLCAgIDMgPT4gIlRocmVlIiwgNCA9PiAiRm91ciIsCiAgICA1ID0+ICJGaXZlIiwgNiA9PiAiU2l4IiwgNyA9PiAiU2V2ZW4iLCA4ID0+ICJFaWdodCIsIDkgPT4gIk5pbmUiCn0KTnVtYmVycyA9IFsxNiwgNTgsIDUxMF0KCgpzdHJpbmdzID0gTnVtYmVycy5tYXAgeyB8bnVtYmVyfAogICAgY2FsbGNjIHsgfGNvbnRpbnVhdGlvbnwKICAgICAgICBsb29wLmluamVjdChbbnVtYmVyLCAnJ10pIHsgfChudW0sIG91dHB1dCksIF98CiAgICAgICAgICAgIGlmIG51bSA+IDAKICAgICAgICAgICAgICAgIFtudW0gLyAxMCwgRGlnaXROYW1lc1tudW0gJSAxMF0gKyBvdXRwdXRdCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbi5jYWxsIG91dHB1dAogICAgICAgICAgICBlbmQKICAgICAgICB9CiAgICB9Cn0KCgpmb3IgcyBpbiBzdHJpbmdzCiAgICBwdXRzIHMKZW5k