[erlang-questions] style question - best way to test multiple non-guard conditions sequentially

Jonathan Leivent <>
Wed Jun 19 20:23:49 CEST 2013


Suppose one has multiple conditions that are not guards that need to be 
tested sequentially (meaning, only test condition N+1 after condition N 
tests false) in a function.  Using a case or if in a simplistic way 
would then produce considerable nesting, especially as the number of 
conditions increases above 2 or 3.

Is there some way in Erlang to write such code without either breaking 
up the function clause or using high degrees of nesting?

The closest I can come is something like:

fun(...) ->
   C1 = cond1(...),
   C2 = C1 orelse cond2(...),
   C3 = C2 orelse cond3(...),
   if C1 -> ...;
      C2 -> ...;
      C3 -> ...;
      true -> ...
   end.

Which works, but looks rather cryptic.  It also seems like it is doing 
all of the branching at least twice.

I guess this also implies the question: why does Erlang require the 
conditions in an if statement to be guards?

-- Jonathan



More information about the erlang-questions mailing list