I am not sure I understand why we have them. For instance I can take the following code<br><pre>is_greater_than(X, Y) ->
if
X>Y ->
true;
true -> % works as an 'else' branch
false
end.</pre>And make it<br><pre>is_true(true) -><br> true;<br>is_true(false) -><br> false.<br><br>is_greater_than(X, Y) ->
is_true(X>Y).</pre>I can do the same thing with case statements<br><pre>is_valid_signal(Signal) ->
case Signal of
{signal, _What, _From, _To} ->
true;
{signal, _What, _To} ->
true;
_Else ->
false
end.<br></pre>Becomes<br><pre>switch_signal({signal, _What, _From, _To}) -><br> true;<br>switch_signal({signal, _What, _To}) -><br> true;<br>switch_signal(_Else) -><br> false.<br><br>is_valid_signal(Signal) ->
switch_signal(Signal).</pre><br>I know that the control structures are a little bit faster, not much, but I find that the function form is more readable. <br>