Memoization in Erlang?
Thomas Johnsson
thomas@REDACTED
Thu Feb 2 15:38:12 CET 2006
Ulf Wiger (AL/EAB) wrote:
>
>Another approach might be:
>
>-define(eval(Expr) -> memo:eval(fun() -> Expr end)).
>
>eval(F) when is_function(F, 0) ->
> case memo_db:lookup(F) of
> {ok, Cached} -> Cached;
> error ->
> Value = F(),
> memo_db:store(F, Value),
> Value
> end
>
>
>
>This has the wonderful advantage that you can
>memoize any expression. F uniquely identifies
>the closure, including bound environment, so
>it will serve as a key.
>
>
What, you can do function equality in Erlang?? I hadn't realized....
That's highly dubious ... When are two function equal according the the
Erlang implementation?
25> fun()-> x end.
#Fun<erl_eval.20.102880425>
26> (fun()-> x end) == (fun()-> x end).
true
27> (fun(X)-> X end) == (fun(X)-> X end).
true
28> (fun(X)-> 2*X end) == (fun(X)-> X+X end).
false
29> (fun(X)-> X end) == (fun(Y)-> Y end).
false
30>
-- Thomas
More information about the erlang-questions
mailing list