Don't confuse "operator precedence" and "order of evaluation".

precedence tells you how the results of individual parts of the calculation are combined. For instance, 1+2*3+4 will give 11 (i.e. multiplication is higher precedence than addition, so the 2 is multiplied by the 3 and then that is used in the lower precedence addition). If you wanted different, you would need brackets ... (1+2)*(3+4) would give you 21 (3*7).

order of evaluation (for LC) is left to right (regardless of precedence !!).

Try this cute test case
global C

function getnext
   add 1 to C
   return C
end getnext

on mouseUp
   put 0 into C
   put getnext()+getnext()*getnext()+getnext()
end mouseUp
this results in 11 - i.e. 1 + 2*3 + 4

If evaluation order had followed precedence then it would have been 3 + (1*2) + 4 ---> 9

The similar rules apply when evaluating logical expressions in a test condition, with the additional proviso that LC will stop evaluating the terms of the expression as soon as the eventual result is determined. So,
on mouseUp
   put 0 into C
if getnext() > 0 and getnext() < 2 and getnext()< 3 and getnext()<3 then
      put "that's a surprise"
   else
      put getnext()
   end if
end mouseUp
produces 3 (first term is true, second term is false and at that point we know the whole expression must be false, so we stop evaluating - therefore the next call to getnext() produces 3

-- Alex.

On 06/10/2011 01:26, Pete wrote:
I just read the section in the manual about operator precedence and I think
perhaps I'm even more confused than I was!  It details a strict order of
precedence which seems to contradict the knowledge that condition evaluation
proceeds from left to right and stops as soon as a false one is found.

Maybe I'll try a few test cases.


Pete
Molly's Revenge<http://www.mollysrevenge.com>



_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to