Wie schreibt man einen Spaß, dass die rekursiv in Erlang?
Bin ich zu schreiben versucht, eine rekursive Spaß in einem Erlang-shell, aber ich bekomme immer einen ungebundenen Variablen Ausnahme:
1> Foo = fun(X) -> Foo(X) end.
* 1: variable 'Foo' is unbound
Dies ist wahrscheinlich selbstverständlich, aber ich werde nicht versuchen, erstellen Sie eine Endlosschleife! Dies ist nur ein einfaches Beispiel für die Fehler, die ich immer bin.
- "Spässe mit Namen": erlang.org/eeps/eep-0037.html, der zusammengeführt wurde Erlang Ende 2012.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie es mit ein wenig argument trick:
Der trick hier ist, zu senden, in der Funktion als argument, um sich selbst zu erlauben Rekursion.
Alternativen Weg, um es in einem Shooting:
Beispiel:
Seit OTP 17.0 gibt es benannte spässe macht die Aufgabe viel einfacher:
Nach Erlang 17, können Sie auch die "Spässe mit Namen" Variante:
In dieser Weise ist es einfacher, zu verstehen, dass
F
ist die Funktion selbst innerhalb der definition. AuchFoo
undF
kann die gleiche variable.Alternativ können Sie die verwenden Sie die Y-combinator. Y Combinator in Erlang erklärt.
Hatte ich das Bedürfnis, schnell zu senden einige Pakete über das UDP-zum testen und hier ist, wie ich es getan mit den Beispielen oben:
Offensichtlich, Foo zugewiesen bekommt nur nach dem Spaß definiert ist, so kann es nicht aufgerufen werden, die von innerhalb es.
Ich glaube nicht, dass Erlang erlaubt es, den anonymen Anruf-Funktion von selbst. Nur machen es zu einem Namen ein.