[erlang-questions] Auto generated functions

Richard Carlsson <>
Thu Feb 21 16:21:40 CET 2008


Zvi wrote:
> In Javascript, unlike Erlang, anonymous function can call itself, without
> using Y-combinator tricks.
> Does it mean that JS is more functional than Erlang:
> 
> factorial = function(n){ return (n==0) ? 1 : n*arguments.callee(n-1); };

No, it means that JS is more *Object Oriented* than Erlang.

But in Erlang, you don't need to use any "Y-combinator tricks":
simply pass the function itself as an extra argument.

  FactX = fun(0, F) -> 1;
             (N, F) -> N * F(N-1, F)
          end,
  13 = FactX(6, FactX)

In practice, this is also how the self-reference works in JS. The
extra parameter is an added cost, that you don't have in Erlang
unless you actually need it (which is not often).

     /Richard






More information about the erlang-questions mailing list