illegal guard

Thomas Arts <>
Mon Jan 17 08:56:13 CET 2000


Bob Smart wrote:

Simply said: A guard may not contain a function that computes something,
at most a test. In your first example you compute the integer 33 in a guard,
which is not allowed. In the second example, the computation has been 
performed on beforehand and the guard is only a test.

One of the reasons for this is that guards
should be easy to implement and very fast to check (for example an
infinite computation in a guard would somehow be catastrophic).

/Thomas


> Why is this an illegal guard
> 
> -module(t).
> -export([test/0]).
> 
> test() ->
>   if
>     33 == list_to_integer("33") -> 99;
>     true -> 88
>   end.
> 
> but this is ok
> 
> -module(t).
> -export([test/0]).
> 
> test() ->
>   Num = list_to_integer("33"),
>   if
>     33 == Num -> 99;
>     true -> 88
>   end.
> 
> Bob



More information about the erlang-questions mailing list