Function matching w/ "abc" ++ Rest

Raimo Niskanen <>
Fri Dec 9 10:46:45 CET 2005


        f1("abc"++Rest) -> abc;

is just syntactical sugar for

        f1([$a,$b,$c|Rest]) -> abc;

so, you might even want to write

        f1("abc"++_) -> abc;

Since "abc" is a compile-time constant, it can be 
expanded without runtime overhead. And it becomes
a rather extensive match, or perhaps just what you
would expect - all characters in the string are
matched.

 (Peter-Henry Mander) writes:

> Assuming tha code was supposed to read:
> 
> f1("abc" ++ Rest) ->
>  abc;
> f1("def" ++ Rest) ->
>  def;
> 
> You would be better off writing:
> 
> f1([$a,$b,$c|_Rest]) -> abc;
> f1([$d,$e,$f|_Rest]) -> def.
> 
> Pete.
> 
> On Fri, 2005-12-09 at 07:01 +0100, dizzyd wrote:
> > A general Erlang theory/performance question...
> > 
> > If I define a series of functions like so:
> > 
> > 
> > f1("abc" ++ Rest) ->
> >   abc;
> > f1("def" ++ Rest) ->
> >   def;
> > 
> > 
> > Is that ++ operator creating a new list and appending to it for the match? Are there scary amounts of list comparisons and overhead happening here? There doesn't seem to be anything about this form in the Erlang docs, yet it works. What's going on? 
> > 
> > Thanks![/list]
> > _________________________________________________________
> > Sent using Mail2Forum (http://m2f.sourceforge.net)
> > 
> 
> 

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list