[erlang-questions] illegal guard expression for IF illegal guard expression for "if"

CGS cgsmcmlxxv@REDACTED
Fri Dec 2 11:06:18 CET 2011


If statement is not a block statement (to fix the variables values at 
the entrance of the statement) in Erlang. That means, if an 
uniform:random() value (say, 0.4) is used for checking the first branch 
condition and the value is changed within the branch (say, 0.7), then 
you enter a paradox related to if the function should be considered for 
the first or the second branch. To avoid this, Erlang requires an 
assurance that the compared values do not change while processing the if 
statement.

CGS



On 12/02/2011 10:56 AM, Barco You wrote:
> Hi CGS,
>
> I can't understand your statement --- " if in the first branch you use 
> again random:uniform(), the second branch condition can report an 
> inaccurate result."  Could you please make it clearer? Thanks!
>
> Hi Others,
>
> Why functions with side effect can not be in the guard expressions?
>
>
> Thank you!
> Barco
>
> On Fri, Dec 2, 2011 at 5:50 PM, CGS <cgsmcmlxxv@REDACTED 
> <mailto:cgsmcmlxxv@REDACTED>> wrote:
>
>     Hi,
>
>     To put in simple words for better understanding, you can have only
>     constant variables withing the guard expression. That means, in
>     your case, if in the first branch you use again random:uniform(),
>     the second branch condition can report an inaccurate result.
>
>     Alternatively, you can use case statement:
>
>     case (random:uniform()<0.5) of
>          true -> good;
>          false -> bad
>     end
>
>     I hope this answer will help you.
>
>     CGS
>
>
>
>
>     On 12/02/2011 10:30 AM, Barco You wrote:
>>     Why does the following expression got "illegal guard expression"
>>     when compiling:
>>     X = 0.5,
>>     if
>>         random:uniform() < X ->      %error reported for this line
>>                good;
>>         true ->
>>                bad
>>     end.
>>
>>     But if I change it to following expression, it's ok:
>>     X = 0.5,
>>     Ran = random:uniform(),
>>     if
>>         Ran < X ->
>>                good;
>>         true ->
>>                bad
>>     end.
>>
>>     BRs,
>>     Barco
>>
>>
>>     _______________________________________________
>>     erlang-questions mailing list
>>     erlang-questions@REDACTED  <mailto:erlang-questions@REDACTED>
>>     http://erlang.org/mailman/listinfo/erlang-questions
>
>
>     _______________________________________________
>     erlang-questions mailing list
>     erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>     http://erlang.org/mailman/listinfo/erlang-questions
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20111202/384c46a8/attachment.htm>


More information about the erlang-questions mailing list