To make the boolean operators non-commutative you would need to give up on short-circuiting evaluation. For example, consider:
(i <= #xs and xs[i]:isgood())
If you try to evaluate the right operand when the left one is false (to check if it is nil or not) then xs[i] will evaluate to nil and trying to call the isgood method will result in a runtime error.
I should add that I do understand what's happening here.and & or aren't Abelian in general nor should be:> = true and "boo""boo"It is only in the case of nil that I suggest the falsiness propagate as a nil. There are considerable advantages in reasoning power.