On 25 Sep 2007 11:15:59 +0200, <b class="gmail_sendername">Bjorn Gustavsson</b> <<a href="mailto:bjorn@erix.ericsson.se">bjorn@erix.ericsson.se</a>> wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Oscar Hellström <<a href="mailto:oscar@erlang-consulting.com">oscar@erlang-consulting.com</a>> writes:<br><br>> Hi,<br>><br>> I've noticed that element/2 doesn't exit with a badarg as I expected<br>
> when used in a list comprehension. Other functions that exit with badarg<br>> are behaving as expected though. Is this actually the intended<br>> behaviour? (I'm using R11B-4 but have also seen it on R11B-3).
<br>><br>> Example:<br>> 1> [Foo || Foo <- [{1,2}], element(3, Foo) /= 9].<br>> []<br>> 5> [Foo || Foo <- [{1,2}], list_to_integer(Foo) /= 10].<br><br>Guard BIFs (such as element/2) will be executed in guard context and will not cause an
<br>exception. All other BIFs and functions call will cause an exception.<br><br>The reason for this difference is because the original implementation did it this way<br>(probably as an optimization or because it was simplest). When we later wanted to change
<br>that in the new Beam compiler for R6B, we discovered that a lot of code in OTP depended<br>on this behaviour, so we kept it.</blockquote><div><br>It was an optimisation, and not because it was simpler to do. It is in fact slightly more difficult, but not much.
<br><br>Robert<br><br></div></div>