
On 2019-04-12 10:47 a.m., Richard Eisenberg wrote:
If you look at definitions of other languages (C, Java), you see that the operators are defined to be left-associative. Perhaps those other languages got it wrong, then. :)
In any case, this conversation has been illuminating. Thanks!
I am late to this discussion but here is my solution. This is really just story-telling to end-users. The real story you want to tell everyone is this: "x && y && z && t" means Scheme's "(and x y z t)", and it means you try the sequence from left to right, stopping at the first incident of "false". To those people who evaluate an AST in the bottom-up order, e.g., C programmers, this sounds like left-associating because the left is more likely evaluated so these people need to envision a left-leaning AST. So you comfort them with "yeah!". To those people who evaluate an AST in the top-down order, e.g., Haskell programmers, this sounds like right-associating because the right is more likely skipped so these people need to envision a right-leaning AST. So you comfort them with "yeah!". So either (both C and Haskell are right) or (both C and Haskell are wrong). As many of you have observed, it doesn't matter, a compiler writer already knows it's "(and x y z t)" and generates the correct code and not bother to split hair.