# Function matching w/ "abc" ++ Rest

7 messages
Open this post in threaded view
|

## Function matching w/ "abc" ++ Rest

 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)
Open this post in threaded view
|

## Function matching w/ "abc" ++ Rest

 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) >
Open this post in threaded view
|

## Function matching w/ "abc" ++ Rest

 Provide reasoning. -------------- next part -------------- An HTML attachment was scrubbed... URL:
Open this post in threaded view
|

## Function matching w/ "abc" ++ Rest

 In reply to this post by Michał Ptaszek 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. Why? The compiler generates exactly the same code for the two ways of writing the function. /Bjorn -- Bj?rn Gustavsson, Erlang/OTP, Ericsson AB
Open this post in threaded view
|

## Function matching w/ "abc" ++ Rest

 In reply to this post by Michał Ptaszek         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 (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