[erlang-questions] re cursive fun()
Ciprian Dorin Craciun
ciprian.craciun@REDACTED
Sun Oct 5 16:11:57 CEST 2008
On Sun, Oct 5, 2008 at 12:30 PM, Richard Carlsson <richardc@REDACTED> wrote:
> deepblue_other wrote:
>> hello
>> I have this going on
>>
>> FunVar =
>> fun() ->
>> ...
>> FunVar()
>> end.
>>
>> so the compiler is complaining that FunVar is unbound at the place where its
>> being used inside fun(); this makes sense, however Im wondering how to make
>> this into a recursive function since there's no name to reference the
>> function with.
>
> You have to make it keep "itself" around as an additional parameter,
> so that you can first create it and then hand it the self-reference:
>
> FunVar =
> fun(Myself) ->
> ...
> Myself(Myself)
> end
>
> then call it like this:
>
> FunVar(FunVar).
>
> If you want the result to be a function of arity 0,
> as in your example, then replace the last line with
>
> FinalFunVar = fun () -> FunVar(FunVar) end
>
> /Richard
>
> --
> "Having users is like optimization: the wise course is to delay it."
> -- Paul Graham
About this subject, I would ask if isn't it better / easier /
clearer to add a special function name / keyword that would refer to
the function itself. This would also have a few advantages:
* first it will solve the recursivity problem described above;
* (maybe) it could also improve efficiency (because you know
exactly what function you're calling, without any lookup); (this is
just an assumption, maybe inside the beam file the lookup does not
exist); (certainly it is more efficient than the proposed solution ---
sending the function as an argument;)
* it will assist in refactoring --- changing a recursive function
name will have no impact on it's code;
* it could clearly mark the fact that the function calls itself.
As for disadvantages I really do not see any. (Except of having a
new keyword / special function.)
So any comments?
Ciprian.
P.S.: I think this solution could be equally applied to all
languages (mainly Lisp like).
More information about the erlang-questions
mailing list