# 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)