# Talk:Exponentiation order

## Functions

So it has to be an operator? A "pow" function is not allowed? --Mwn3d (talk) 19:00, 18 March 2014 (UTC)

No, and then no.   Er, I mean, it doesn't have to be, and yes, POW is allowed if there isn't an operator for exponentiation.   I have no qualms about including the POW function in any case.   But a function has no misinterpretation of what order the exponentiation is in, as in   pow(x,y).   Of course, you could write   pow(x, pow(y,z))   (or something similar, depending on you or your language interpret the operator) to show this task's intention, but there is no ambiguity in function calls.   Whereas,   5**3**2   is swimming with vagueness. -- Gerard Schildberger (talk) 19:09, 18 March 2014 (UTC)
Why? Somehow people don't find "a - b - c" swimming in vagueness. And in the languages I know, if there's an pow operator, 5**3**2 is always interpreted as 5**(3**2), just like in maths. --Ledrug (talk) 03:31, 19 March 2014 (UTC)
I also don't believe that   a-b-c   is vague, but then, subtraction isn't what is being discussed.   The why is simple to explain:   because not all computer languages treat multiple (or chained) exponentiation the same.   5**3**2   is not always interpreted as   5**(3**2).   If that expression would be treated universally the same, there wouldn't be a need for this Rosetta Code task.   I'm not going to pontificate whether or not which manner of evaluation is correct; the main thing I'm interested is how various computer languages evaluate the expression, and what value is produced.   It's not a matter of doing it "the right way", the way that a computer language does it, is the way it is.   To quote my niece, Jackie, it is what it is. -- Gerard Schildberger (talk) 03:56, 19 March 2014 (UTC)
"If that expression would be treated universally the same, there wouldn't be a need for this Rosetta Code task." Can you give an example of a place where it is not right associative? Because I precisely have trouble figuring out why there's need for this Rosetta Code task. --Spoon! (talk) 09:06, 19 March 2014 (UTC)
The existing examples show a difference. The first Perl 6 example shows that 5**3**2 = 5**(3**2) and the REXX example shows that 5**3**2 = (5**3)**2. --Mwn3d (talk) 13:05, 19 March 2014 (UTC)
Likewise, a - b - c is also "swimming in vagueness" if you might or might not be programming in an APL derivative, where pretty much everything is right associative, if I recall correctly. --TimToady (talk) 21:16, 19 March 2014 (UTC)
Which is one reason to show examples.   Without examples of different computer languages, we'd have to resort to researching each computer language to find this information, and in the case of REXX (and probably other language docs), the documentation doesn't mention specifically the result of   a**b**c.   As soon as other REXX "derivatives" (in the sense that they were developed later), APL (+ derivatives), and other computer languages, more differences will show up. -- Gerard Schildberger (talk) 23:29, 23 March 2014 (UTC)
If the docs don't say anything about the order of evaluation, it's implementation-dependent, isn't it? Shouldn't you then mention for the REXX entry which implementation produced the output? --Andreas Perstinger (talk) 08:16, 24 March 2014 (UTC)
No, it just means the docs aren't complete.   That's what documentation for language standards are meant for, to eliminate those differences between implementations of compilers (or interpreters).   Most differences have to do with the numerous file systems on various operating systems and their differing architecture.   For the CLASSIC REXX language, for what I've observed, there is much more testing to ensure that the various interpreters are consistent, whether or not the behavior is documented.   It's a bit easier, I think, because the REXX language is very minimalistic.   That is to say that differences don't creep in during the creation of another REXX interpreter.   As for which REXX implementation was used, I executed most of the REXXes that I have installed: PC/REXX, Personal REXX, all versions of Regina, R4, and ROO.   I have others, but they are somewhat of a pain in the neckhole to execute for numerous reasons.   But there are more REXX that I don't have, not the least of which are the object-oriented REXXes.   If there are any Classic REXXes that produce a different result, I'm sure other people will note the difference. -- Gerard Schildberger (talk) 09:05, 24 March 2014 (UTC)
When home computers where new and there seemed to be so many implementations of BASIC, associativity was all over the place. I found out from this task that Pythons naive reduce example doesn't give the 'proper' associativity for example. --Paddy3118 (talk) 07:09, 24 March 2014 (UTC)
IMHO the Python `reduce` function has nothing to do with that task. It will always apply the given function on elements of the sequence from left to right, regardless of the function.
And I don't think that task makes sense for languages without an exponentiation operator. --Andreas Perstinger (talk) 08:23, 24 March 2014 (UTC)
The Rosetta Code task is still in draft status, so it could be changed if you think it's warranted.   I didn't think that there were that many computer languages that didn't have an exponential operator, so I didn't want to exclude them on that basis. -- Gerard Schildberger (talk) 09:05, 24 March 2014 (UTC)