[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