Python: verschachtelte Lambdas - `s_push: Parser Stack Overflow Memory Error`

Ich bin kürzlich gestolpertDieser Beitrag Hier wird beschrieben, wie man FizzBuzz nur mit Procs in Ruby codiert, und da ich gelangweilt war, dachte ich, es wäre nicht schlecht, dasselbe in Python mit Lambdas zu implementieren.

Ich kam zu dem Abschnitt, in dem Sie Zahlen mit verschachtelten Funktionen erstellen, und schrieb das folgende Python-Skript:

#!/usr/bin/env python

zero  = lambda p : (lambda x: x)
one   = lambda p : (lambda x: p(x))
two   = lambda p : (lambda x: p(p(x)))
three = lambda p : (lambda x: p(p(p(x))))
five  = lambda p: (lambda x: p(p(p(p(p(x))))))

fifteen = lambda p : (lambda x: p(p(p(p(p( \
                                p(p(p(p(p( \
                                p(p(p(p(p(x))))))))))))))))


hundred = lambda p: (lambda x: p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p(x)))))))))))))))))))))))))))) \
                                                     ))))))))))))))))))))))))))) \
                                                     ))))))))))))))))))))))))))) \
                                                     )))))))))))))))))))

def to_int(func):
    return func(lambda n: n + 1)(0)

print to_int(zero)
print to_int(one)
print to_int(two)
print to_int(three)
print to_int(five)
print to_int(fifteen)
print to_int(hundred)

Die Nummern 0 bis 15 funktionieren einwandfrei, aber wenn ich versuche, die Nummer 100 zu erstellen, wird die Datei aufgrund des folgenden Fehlers nicht ausgeführt:

s_push: Parser Stack Overflow
MemoryError

Ich muss es auskommentieren, damit die Datei überhaupt ausgeführt wird.

Diese Art von Trottel - gibt es irgendeinen Weg, um diese Einschränkung zu umgehen, damit ich willkürlich Lambdas und Funktionsaufrufe verschachteln kann, ohne dass Python umfällt und der Speicher knapp wird?

Oder gibt es alternativ einen Lambda-Kalkül-Trick, mit dem ich die Zahl 100 ausdrücken kann, ohne so viele verschachtelte Funktionen zu haben?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage