Executing boolean expressions on a list

Shawn Pearce <>
Fri Mar 14 03:12:00 CET 2003


I find I'm writing a lot of:

	recursive(N, [H | T]) ->
		case somef(N, H) of
			true ->	recursive(N, T);
			false -> false
		end;
	recursive(N, []) ->
		true.

	somef(N, E) ->
		.... % return true or false.

Is there a faster way to write recursive/2 ?  In some cases I have to hand
around 2 or 3 args instead of just N, but usually they are just payload
data to somef/2 (or whatever arity) to help it perform its test.  I'm
just wondering if perhaps there's a faster way to express the case .. end
in recursive/2.

I'm trying to keep it tail-recursive.  I thought about:

	recursive(N, [H | T]) ->
		if
			somef(N, H) -> recursive(N, T);
			false -> false
		end;
	recursive(N, []) -> true.

which I didn't like because of the formatting of the if statement, and:

	recursive(N, [H | T]) -> somef(N, H) and recursive(N, T);
	recursive(N, []) -> true.

but was worried about order of evaluation on the and operator
and not being able tail-recursive.


Feedback from the Erlang pros is good.  ;-)

-- 
Shawn.

  Q:	Minnesotans ask, "Why aren't there more pharmacists from Alabama?"
  A:	Easy.  It's because they can't figure out how to get the little
  	bottles into the typewriter.



More information about the erlang-questions mailing list