<div dir="ltr"><div class="gmail_quote">2008/7/22 Richard A. O'Keefe <<a href="mailto:ok@cs.otago.ac.nz">ok@cs.otago.ac.nz</a>>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="Ih2E3d"><br></div>
As you see, using 'orelse' results in code that is CONSIDERABLY<br>
LESS COMPACT than code using ';'.  And it is not just less<br>
compact, it executes more instructions.  If compact speedy code<br>
is something you want, then you would have to be off your rocker<br>
to use 'orelse' in a guard.</blockquote><div><br></div><div>I won't reproduce the code here.</div><div><br></div><div>The reason for this, which Richard touches on later in his message, is that for the 'orelse' code the compiler generates code to return 'true' when the tests succeed which is then checked at the end. This follows the semantics of  'orelse' but is not really necessary here. In the ';' case the compiler just generates a sequence of (inverted) tests which is in keeping how guards, guard sequences and the tests in them were originally defined.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Note:  this might not be true for all time.<br>
*In a guard*, and when governing tests rather than some random<br>
expressions, 'orelse' should be compiled exactly like ';' and<br>
'andalso' should be compiled exactly like ','.</blockquote><div><br></div><div>There is some difficulty here with handling exceptions in nested 'orelse'/'andalso' which could make this a little difficult. Depending on how you define nested ',' and ';' this may or may not be a problem.</div>
<div><br></div><div>Robert</div><div><br></div></div></div>