# Swift's closure
# https://d...content-available-to-author-only...e.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
def unfoldl_string(b, f):
pair = f(b)
if pair is None:
return ""
else:
a, b1 = pair
return unfoldl_string(b1, f) + a
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]
def number_to_string(number):
return unfoldl_string(
number,
lambda num:
None
if num <= 0 else
(digitNames[num % 10], num / 10)
)
strings = [number_to_string(number) for number in numbers]
for s in strings:
print(s)
IyBTd2lmdCdzIGNsb3N1cmUKIyAgIGh0dHBzOi8vZC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jb20vbGlicmFyeS9pb3MvZG9jdW1lbnRhdGlvbi9Td2lmdC9Db25jZXB0dWFsL1N3aWZ0X1Byb2dyYW1taW5nX0xhbmd1YWdlL0Nsb3N1cmVzLmh0bWwKCgpkZWYgdW5mb2xkbF9zdHJpbmcoYiwgZik6CiAgICBwYWlyID0gZihiKQoKICAgIGlmIHBhaXIgaXMgTm9uZToKICAgICAgICByZXR1cm4gIiIKICAgIGVsc2U6CiAgICAgICAgYSwgYjEgPSBwYWlyCgogICAgICAgIHJldHVybiB1bmZvbGRsX3N0cmluZyhiMSwgZikgKyBhCgoKZGlnaXROYW1lcyA9IHsKICAgIDA6ICJaZXJvIiwgMTogIk9uZSIsIDI6ICJUd28iLCAgIDM6ICJUaHJlZSIsIDQ6ICJGb3VyIiwKICAgIDU6ICJGaXZlIiwgNjogIlNpeCIsIDc6ICJTZXZlbiIsIDg6ICJFaWdodCIsIDk6ICJOaW5lIgp9Cm51bWJlcnMgPSBbMTYsIDU4LCA1MTBdCgoKZGVmIG51bWJlcl90b19zdHJpbmcobnVtYmVyKToKICAgIHJldHVybiB1bmZvbGRsX3N0cmluZygKICAgICAgICBudW1iZXIsCiAgICAgICAgbGFtYmRhIG51bToKICAgICAgICAgICAgICAgIE5vbmUKICAgICAgICAgICAgaWYgbnVtIDw9IDAgZWxzZQogICAgICAgICAgICAgICAgKGRpZ2l0TmFtZXNbbnVtICUgMTBdLCBudW0gLyAxMCkKICAgICkKc3RyaW5ncyA9IFtudW1iZXJfdG9fc3RyaW5nKG51bWJlcikgZm9yIG51bWJlciBpbiBudW1iZXJzXQoKCmZvciBzIGluIHN0cmluZ3M6CiAgICBwcmludChzKQ==