Function matching w/ "abc" ++ Rest
Raimo Niskanen
raimo@REDACTED
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.
erlang@REDACTED (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