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:<->) |
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:<->) |
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}}== |