Exponentiation with infix operators in (or operating on) the base: Difference between revisions

Content deleted Content added
Thundergnat (talk | contribs)
→‎{{header|Raku}}: Add another precedence level, demo
Thundergnat (talk | contribs)
→‎{{header|Raku}}: Add another parenthesis grouping
Line 93: Line 93:
* <code>(-x){exponential operator}p</code>
* <code>(-x){exponential operator}p</code>
* <code>-(x{exponential operator}p)</code>
* <code>-(x{exponential operator}p)</code>
Also add a different grouping: <code>(1 + -x){exponential operator}p</code>


<lang perl6>say 'Default precedence: infix exponentiation is tighter (higher) precedence than unary negation.';
<lang perl6>say 'Default precedence: infix exponentiation is tighter (higher) precedence than unary negation.';
sub infix-exp (\x, \p) {
sub infix-exp (\x, \p) {
printf "x = %2d p = %d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d\n", x, p,
printf "x = %2d p = %d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d\n", x, p,
'1 + -x**p', 1 + -x**p, '1 + -(x)**p', 1 + -(x)**p, '1 + (-x)**p', 1 + (-x)**p, '1 + -(x**p)', 1 + -(x**p);
'1 + -x**p', 1 + -x**p, '1 + -(x)**p', 1 + -(x)**p, '1 + (-x)**p', 1 + (-x)**p, '(1 + -x)**p', (1 + -x)**p, '1 + -(x**p)', 1 + -(x**p);
}
}


Line 104: Line 105:


say "\nEasily modified: custom loose infix exponentiation is looser (lower) precedence than unary negation.";
say "\nEasily modified: custom loose infix exponentiation is looser (lower) precedence than unary negation.";
sub infix:<↑> is looser(&prefix:<->) { $^a ** $^b }
sub infix:<↑> is looser(&prefix:<->) { $^a ** $^b }

sub infix-loose-exp (\x, \p) {
sub infix-loose-exp (\x, \p) {
printf "x = %2d p = %d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d\n", x, p,
printf "x = %2d p = %d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d\n", x, p,
'1 + -x↑p ', 1 + -x↑p, '1 + -(x)↑p ', 1 + -(x)↑p, '1 + (-x)↑p ', 1 + (-x)↑p, '1 + -(x↑p) ', 1 + -(x↑p);
'1 + -x↑p ', 1 + -x↑p, '1 + -(x)↑p ', 1 + -(x)↑p, '1 + (-x)↑p ', 1 + (-x)↑p, '(1 + -x)↑p ', (1 + -x)↑p, '1 + -(x↑p) ', 1 + -(x↑p);
}
}


Line 115: Line 116:


say "\nEven moreso: custom looser infix exponentiation is looser (lower) precedence than infix subtraction.";
say "\nEven moreso: custom looser infix exponentiation is looser (lower) precedence than infix subtraction.";
sub infix:<^> is looser(&infix:<->) { $^a ** $^b }
sub infix:<^> is looser(&infix:<->) { $^a ** $^b }


sub infix-looser-exp (\x, \p) {
sub infix-looser-exp (\x, \p) {
printf "x = %2d p = %d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d\n", x, p,
printf "x = %2d p = %d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d │ %s = %4d\n", x, p,
'1 + -x^p ', 1 + -x^p, '1 + -(x)^p ', 1 + -(x)^p, '1 + (-x)^p ', 1 + (-x)^p, '1 + -(x^p) ', 1 + -(x^p);
'1 + -x^p ', 1 + -x^p, '1 + -(x)^p ', 1 + -(x)^p, '1 + (-x)^p ', 1 + (-x)^p, '(1 + -x)^p ', (1 + -x)^p, '1 + -(x^p) ', 1 + -(x^p);
}
}


Line 125: Line 126:
{{out}}
{{out}}
<pre>Default precedence: infix exponentiation is tighter (higher) precedence than unary negation.
<pre>Default precedence: infix exponentiation is tighter (higher) precedence than unary negation.
x = -5 p = 2 │ 1 + -x**p = -24 │ 1 + -(x)**p = -24 │ 1 + (-x)**p = 26 │ 1 + -(x**p) = -24
x = -5 p = 2 │ 1 + -x**p = -24 │ 1 + -(x)**p = -24 │ 1 + (-x)**p = 26 │ (1 + -x)**p = 36 │ 1 + -(x**p) = -24
x = -5 p = 3 │ 1 + -x**p = 126 │ 1 + -(x)**p = 126 │ 1 + (-x)**p = 126 │ 1 + -(x**p) = 126
x = -5 p = 3 │ 1 + -x**p = 126 │ 1 + -(x)**p = 126 │ 1 + (-x)**p = 126 │ (1 + -x)**p = 216 │ 1 + -(x**p) = 126
x = 5 p = 2 │ 1 + -x**p = -24 │ 1 + -(x)**p = -24 │ 1 + (-x)**p = 26 │ 1 + -(x**p) = -24
x = 5 p = 2 │ 1 + -x**p = -24 │ 1 + -(x)**p = -24 │ 1 + (-x)**p = 26 │ (1 + -x)**p = 16 │ 1 + -(x**p) = -24
x = 5 p = 3 │ 1 + -x**p = -124 │ 1 + -(x)**p = -124 │ 1 + (-x)**p = -124 │ 1 + -(x**p) = -124
x = 5 p = 3 │ 1 + -x**p = -124 │ 1 + -(x)**p = -124 │ 1 + (-x)**p = -124 │ (1 + -x)**p = -64 │ 1 + -(x**p) = -124


Easily modified: custom loose infix exponentiation is looser (lower) precedence than unary negation.
Easily modified: custom loose infix exponentiation is looser (lower) precedence than unary negation.
x = -5 p = 2 │ 1 + -x↑p = 26 │ 1 + -(x)↑p = 26 │ 1 + (-x)↑p = 26 │ 1 + -(x↑p) = -24
x = -5 p = 2 │ 1 + -x↑p = 26 │ 1 + -(x)↑p = 26 │ 1 + (-x)↑p = 26 │ (1 + -x)↑p = 36 │ 1 + -(x↑p) = -24
x = -5 p = 3 │ 1 + -x↑p = 126 │ 1 + -(x)↑p = 126 │ 1 + (-x)↑p = 126 │ 1 + -(x↑p) = 126
x = -5 p = 3 │ 1 + -x↑p = 126 │ 1 + -(x)↑p = 126 │ 1 + (-x)↑p = 126 │ (1 + -x)↑p = 216 │ 1 + -(x↑p) = 126
x = 5 p = 2 │ 1 + -x↑p = 26 │ 1 + -(x)↑p = 26 │ 1 + (-x)↑p = 26 │ 1 + -(x↑p) = -24
x = 5 p = 2 │ 1 + -x↑p = 26 │ 1 + -(x)↑p = 26 │ 1 + (-x)↑p = 26 │ (1 + -x)↑p = 16 │ 1 + -(x↑p) = -24
x = 5 p = 3 │ 1 + -x↑p = -124 │ 1 + -(x)↑p = -124 │ 1 + (-x)↑p = -124 │ 1 + -(x↑p) = -124
x = 5 p = 3 │ 1 + -x↑p = -124 │ 1 + -(x)↑p = -124 │ 1 + (-x)↑p = -124 │ (1 + -x)↑p = -64 │ 1 + -(x↑p) = -124


Even moreso: custom looser infix exponentiation is looser (lower) precedence than infix subtraction.
Even moreso: custom looser infix exponentiation is looser (lower) precedence than infix subtraction.
x = -5 p = 2 │ 1 + -x^p = 36 │ 1 + -(x)^p = 36 │ 1 + (-x)^p = 36 │ 1 + -(x^p) = -24
x = -5 p = 2 │ 1 + -x^p = 36 │ 1 + -(x)^p = 36 │ 1 + (-x)^p = 36 │ (1 + -x)^p = 36 │ 1 + -(x^p) = -24
x = -5 p = 3 │ 1 + -x^p = 216 │ 1 + -(x)^p = 216 │ 1 + (-x)^p = 216 │ 1 + -(x^p) = 126
x = -5 p = 3 │ 1 + -x^p = 216 │ 1 + -(x)^p = 216 │ 1 + (-x)^p = 216 │ (1 + -x)^p = 216 │ 1 + -(x^p) = 126
x = 5 p = 2 │ 1 + -x^p = 16 │ 1 + -(x)^p = 16 │ 1 + (-x)^p = 16 │ 1 + -(x^p) = -24
x = 5 p = 2 │ 1 + -x^p = 16 │ 1 + -(x)^p = 16 │ 1 + (-x)^p = 16 │ (1 + -x)^p = 16 │ 1 + -(x^p) = -24
x = 5 p = 3 │ 1 + -x^p = -64 │ 1 + -(x)^p = -64 │ 1 + (-x)^p = -64 │ 1 + -(x^p) = -124</pre>
x = 5 p = 3 │ 1 + -x^p = -64 │ 1 + -(x)^p = -64 │ 1 + (-x)^p = -64 │ (1 + -x)^p = -64 │ 1 + -(x^p) = -124</pre>


=={{header|REXX}}==
=={{header|REXX}}==