<br><br><div class="gmail_quote">On Tue, Aug 28, 2012 at 4:56 AM, Jayson Barley <span dir="ltr"><<a href="mailto:jayson.barley@gmail.com" target="_blank">jayson.barley@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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></blockquote><div>Your is_true/1 means that it may meet either true, false, or other values.</div><div>However, 'if' statement means that it would meet two cases definitely.</div><div><br>
</div><div>is_true/1 is an identity function (fun(X) -> X end) working on Boolean values.</div><div>Then it may be is_true(X>Y) or is_true(is_true(X>Y)) or</div><div>is_true(is_true(is_true(is_true(is_true(is_true(X>Y)))))).</div>
<div>Eventually, It is (X > Y).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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></blockquote><div><br></div><div><pre>is_valid_signal(Signal) ->
    case Signal of
        {signal, _What, _From, _To} ->
            true;
        {signal, _What, _To} ->
            true;
        _Else ->
            false
    end.</pre><pre>The above is an alternative version of</pre><pre><pre>is_valid_signal({signal, _What, _From, _To}) -></pre><pre>    true;</pre><pre><pre>is_valid_signal({signal, _What, _To}) -></pre>    true;<br>
<pre>s_valid_signal(_Else) -></pre>    false.</pre>
</pre></div><div>Don't repeat it.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I know that the control structures are a little bit faster, not much, but I find that the function form is more readable. <br>

<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br><br>In my opinion, 'if' block limits the domain, and 'case' block provides<div>a way more writable than to write many function heads to pick its</div><div>matching patterns.<br>
<br clear="all"><div><br></div>-- <br><div><br></div>Best Regards.<div><br></div><div>--- Y-H. H.</div><div><br></div><br>
</div>