Y-combinator in Erlang

Vladimir Sekissov <>
Tue Jan 7 18:41:21 CET 2003


Good day,

I've surprisingly found Y-combinator very useful to solve practical
problem of writing recursive anonymous functions in Erlang.

Code were translated to Erlang from 
http://www.ece.uc.edu/~franco/C511/html/Scheme/ycomb.html.


-module(lambda).

-export([y/1, mk_fact/0]).

%% Y-combinator itself
y(X) ->
  F = fun (P) -> X(fun (Arg) -> (P(P))(Arg) end) end,
  F(F).

%% Factorial example
mk_fact() ->
  F =
    fun (FA) ->
	fun (N) ->
	    if (N == 0) -> 1;
	       true -> N * FA(N-1)
	    end
	end
    end,
  y(F).


>From shell:

1> F = mk_fact().
#Fun<lambda.3.115879927>

2> F(5).
120

Best Regards,
Vladimir Sekissov



More information about the erlang-questions mailing list