[erlang-questions] Self-referencing anonymous functions?
Richard Carlsson
richardc@REDACTED
Thu Apr 2 20:48:06 CEST 2009
Thomas Allen wrote:
> I'm just getting going with Erlang (using Armstrong's book) and I ran
> into anonymous functions. I tried translating the shop:cost and
> shop:total functions, but I cannot translate the latter because it
> refers to itself. How would I rewrite this to not throw errors?
>
> Total = fun ([{What, N}|T]) ->
> Cost(What) * N + Total(T); % Clearly, "Total" won't fly here
> ([]) -> 0
> end.
You have to make it a parameter of the function, and then
keep passing it the reference to itself, like this:
Total = fun ([{What, N}|T], ThisFunction) ->
Cost(What) * N + ThisFunction(T, ThisFunction);
([], ThisFunction) -> 0
end,
Sum = Total(SomeList, Total)
you can wrap the initial call in another fun, like this:
MyTotal = fun (List) -> Total(List, Total) end,
Sum = MyTotal(SomeList)
/Richard
More information about the erlang-questions
mailing list