Lambda-Ausdruck

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Vega
User
Beiträge: 28
Registriert: Sonntag 29. Januar 2017, 12:03

Hallo,

kann mir jemand hierbei weiterhelfen:

(lambda f: lambda n: f(f(f(n)))) (lambda x: x + 13) (3)

Warum kommt hier 42 raus?

Vielen Dank =)
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Weil 3 + 13 + 13 + 13 = 42 ist? ;) Das ist ja ein Puzzle und kein "ernsthafter" Code -- und Puzzles machen doch am meisten Spaß, wenn man sie selbst löst :)

Jedenfalls:
Versuch mal, den Code so aufzubereiten, dass die interne Struktur besser sichtbar wird. Dann liest du ihn erst von hinten nach vorne, bzw. oben nach unten (denn Einrückung bietet sich an) und dann im vorderen Ausdrücke von Innen nach außen. Es bietet sich an, darauf zu achten, wo 'f' und wo 'n' steht. Anschließend kannst du z.B. schrittweise die Argumente an der jeweils passenden Position einfügen/ersetzen.
Vega
User
Beiträge: 28
Registriert: Sonntag 29. Januar 2017, 12:03

Danke erstmal :)


(lambda f: lambda n: f(f(f(n)))) (lambda x: x + 13) (3)

Also ich wende 3 auf x + 13 an, bis dahin verstehe ich es :D

Die Funktion f definiert eine Funktion n, welche f 3x aufruft.
Aber so wäre das doch ein unendliches aufrufen von f?
Was verstehe ich hier nicht?
Antworten