[erlang-questions] LFE - Lisp Flavoured Erlang released
Kevin Scaldeferri
kevin@REDACTED
Tue Mar 11 08:17:03 CET 2008
On Mar 10, 2008, at 11:32 PM, Hynek Vychodil wrote:
>
>
> On Tue, Mar 11, 2008 at 12:25 AM, Kevin Scaldeferri <kevin@REDACTED
> > wrote:
>
> On Mar 10, 2008, at 3:44 PM, Kevin Scaldeferri wrote:
>
> >
> > On Mar 10, 2008, at 2:11 PM, Torbjorn Tornkvist wrote:
> >
> >>
> >> Perhaps a stupid question. Do LFE implement currying?
> >> If not, why?
> >>
> >> I want currying... :-)
> >>
> >
> > Here's something I threw together in a couple minutes:
> >
> > %% F({a,b}) -> F'(a,b)
> > curry(F, Arity) ->
> > if
> > Arity =:= 1 -> fun(A) -> F({A}) end;
> > Arity =:= 2 -> fun(A,B) -> F({A,B}) end;
> > Arity =:= 3 -> fun(A,B,C) -> F({A,B,C}) end;
> > Arity =:= 4 -> fun(A,B,C,D) -> F({A,B,C,D}) end;
> > Arity =:= 5 -> fun(A,B,C,D,E) -> F({A,B,C,D,E}) end;
> > true -> throw(unsupported_arity)
> > end.
> >
>
> Should do slightly more browsing of the docs before posting :-). This
> is a slight improvement:
>
> %% F({a,b}) -> F'(a,b)
> curry(F) ->
> {arity, Arity} = erlang:fun_info(F, arity),
> if
> Arity =:= 1 -> fun(A) -> F({A}) end;
> Arity =:= 2 -> fun(A,B) -> F({A,B}) end;
> Arity =:= 3 -> fun(A,B,C) -> F({A,B,C}) end;
> Arity =:= 4 -> fun(A,B,C,D) -> F({A,B,C,D}) end;
> Arity =:= 5 -> fun(A,B,C,D,E) -> F({A,B,C,D,E}) end;
> true -> throw(unsupported_arity)
> end.
>
> That's wrong I think. Function F will be always called with arity 1.
Yup, I realized that later as well. That change works for papply, but
not for curry. (This shortcoming is not restricted to Erlang, one
should note. For example, in Haskell, curry and uncurry only operate
on binary functions.)
-kevin
More information about the erlang-questions
mailing list