Was ist der kürzeste Weg, um eine anonyme rekursive Funktion in Octave zu definieren?


12

Ich liebe das funktionale Programmieren in Octave, aber es ist in der Praxis ziemlich unhandlich. Ich frage mich, wie man auf kürzestem Weg eine anonyme rekursive Funktion definieren kann.

Ich habe einige Ideen, aber ich frage mich, ob es eine Möglichkeit gibt, diese Ideen zu kombinieren, um sie noch kürzer (oder ebenso kurz, aber vielseitiger) zu machen. Um diese Frage zu beantworten, werden wir rekursiv bis Null herunterzählen (nur um die Nutzlast so einfach wie möglich zu halten).

Wenn meine Argumentation korrekt ist, sollte sich keiner der in den folgenden Beispielen verwendeten Variablennamen überschneiden. Die gewünschte Funktion ist q(n), die immer Null zurückgeben soll. iwird als zählervariable verwendet, fist die rekursive funktion, die ich gim lokalen umfang von aufgerufen habe f.

44 Bytes, "Inline-Definition von f"

q=@(n)(f=@(g,i){@()g(g,i-1),i}{~i+1}())(f,n)

44 Bytes, "Argumentlistendefinition von f"

q=@(n,f=@(g,i){@()g(g,i-1),i}{~i+1}())f(f,n)

44 Bytes, "separate Definition von f"

f=@(i,g){@()g(i-1,g),i}{~i+1}();q=@(n)f(n,f)

41 Bytes, "gewünschte Funktion als Rückgabewert"

f=@(g)@(n){@()g(g)(n-1),n}{~n+1}();q=f(f)

Der aktuelle Gewinner ist von dieser Antwort von flawr inspiriert . Angesichts der Vielzahl unterschiedlicher Möglichkeiten kann sich jedoch vielleicht jemand eine noch kürzere Methodenkombination vorstellen.

Das Ziel ist natürlich, es unter 39 Bytes für eine "volle" Funktion zu bekommen. Probieren Sie es online aus!

Antworten:


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.