small erlang question.

Richard Carlsson <>
Fri Jan 16 13:39:32 CET 2004


On Fri, 16 Jan 2004, WILLIAMS Dominic wrote:

> But here's my favourite:
>
> Actions = [{Str1,fun(Txt) -> ... end},
>            {Str2,fun(Txt) -> ... end},
>            ...],
> [Fun(Text) || {Str,Fun} <- Actions, string:str(Text,Str)>0].

This is the nicest approach, I think, but the above would check
all the strings even if the first one matches.
You could use a library function in 'lists' instead:

 Cases = [{Str1, fun handle1/1},
          {Str2, fun handle2/1},
          ...],
 case lists:dropwhile(fun({S,_})-> string:str(Text,S)==0 end, Cases) of
   [{S,F}|_] -> F(Text);
   [] -> exit(not_found)
 end

	/Richard



Richard Carlsson ()   (This space intentionally left blank.)
E-mail: 	WWW: http://user.it.uu.se/~richardc/
 "Having users is like optimization: the wise course is to delay it."
   -- Paul Graham



More information about the erlang-questions mailing list