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

m
syntax highlighting fixup automation
(Applesoft BASIC)
m (syntax highlighting fixup automation)
Line 74:
</pre>
Ada provides an exponentiation operator for integer types and floating point types.
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO; use Ada.Text_IO;
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
Line 122:
end Main;
 
</syntaxhighlight>
</lang>
{{output}}
<pre>
Line 140:
In Algol 68, all unary operators have a higher precedence than any binary operator.
<br>Algol 68 also allows UP and ^ for the exponentiation operator.
<langsyntaxhighlight lang="algol68">BEGIN
# show the results of exponentiation and unary minus in various combinations #
FOR x FROM -5 BY 10 TO 5 DO
Line 152:
OD
OD
END</langsyntaxhighlight>
{{out}}
<pre>
Line 162:
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f EXPONENTIATION_WITH_INFIX_OPERATORS_IN_OR_OPERATING_ON_THE_BASE.AWK
# converted from FreeBASIC
Line 175:
exit(0)
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 188:
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
<langsyntaxhighlight lang="gwbasic">S$=" ":M$=CHR$(13):?M$" X P -X^P -(X)^P (-X)^P -(X^P)":FORX=-5TO+5STEP10:FORP=2TO3:?M$MID$("+",1+(X<0));X" "PRIGHT$(S$+STR$(-X^P),8)RIGHT$(S$+STR$(-(X)^P),8)RIGHT$(S$+STR$((-X)^P),8)RIGHT$(S$+STR$(-(X^P)),8);:NEXTP,X</langsyntaxhighlight>
{{out}}
<pre>
Line 200:
</pre>
==={{header|BASIC256}}===
<langsyntaxhighlight BASIC256lang="basic256">print " x p | -x^p -(x)^p (-x)^p -(x^p)"
print ("-"*15); "+"; ("-"*45)
for x = -5 to 5 step 10
Line 206:
print " "; rjust(x,2); " "; ljust(p,2); " | "; rjust((-x^p),6); " "; rjust((-(x)^p),6); (" "*6); rjust(((-x)^p),6); " "; rjust((-(x^p)),6)
next p
next x</langsyntaxhighlight>
{{out}}
<pre> x p | -x^p -(x)^p (-x)^p -(x^p)
Line 216:
 
==={{header|Gambas}}===
<langsyntaxhighlight lang="gambas">Public Sub Main()
 
Print " x p | -x^p -(x)^p (-x)^p -(x^p)"
Line 226:
Next
 
End</langsyntaxhighlight>
{{out}}
<pre>Same as FreeBASIC entry.</pre>
Line 234:
{{works with|QuickBasic|4.5}}
{{works with|FreeBASIC}}
<langsyntaxhighlight lang="qbasic">PRINT " x p | -x^p -(x)^p (-x)^p -(x^p)"
PRINT "----------------+---------------------------------------------"
FOR x = -5 TO 5 STEP 10
Line 240:
PRINT USING " ## ## | #### #### #### ####"; x; p; (-x ^ p); (-(x) ^ p); ((-x) ^ p); (-(x ^ p))
NEXT p
NEXT x</langsyntaxhighlight>
{{out}}
<pre>Same as FreeBASIC entry.</pre>
Line 249:
{{works with|QBasic}}
{{works with|True BASIC}}
<langsyntaxhighlight lang="lb">print " x"; chr$(9); " p"; chr$(9); " | "; chr$(9); "-x^p"; chr$(9); " "; chr$(9); "-(x)^p"; chr$(9); " "; chr$(9); "(-x)^p"; chr$(9); " "; chr$(9); "-(x^p)"
print "----------------------------+-----------------------------------------------------------------"
for x = -5 to 5 step 10
Line 256:
next p
next x
end</langsyntaxhighlight>
{{out}}
<pre>Similar to FreeBASIC entry.</pre>
 
==={{header|True BASIC}}===
<langsyntaxhighlight lang="qbasic">PRINT " x p | -x^p -(x)^p (-x)^p -(x^p)"
PRINT "----------------+---------------------------------------------"
FOR x = -5 TO 5 STEP 10
Line 268:
NEXT p
NEXT x
END</langsyntaxhighlight>
{{out}}
<pre>Same as FreeBASIC entry.</pre>
 
==={{header|PureBasic}}===
<langsyntaxhighlight PureBasiclang="purebasic">OpenConsole()
PrintN(" x p | -x^p -(x)^p (-x)^p -(x^p)")
PrintN("----------------+---------------------------------------")
Line 282:
Next x
Input()
CloseConsole()</langsyntaxhighlight>
{{out}}
<pre> x p | -x^p -(x)^p (-x)^p -(x^p)
Line 293:
==={{header|XBasic}}===
{{works with|Windows XBasic}}
<langsyntaxhighlight lang="xbasic">PROGRAM "Exponentiation with infix operators in (or operating on) the base"
 
DECLARE FUNCTION Entry ()
Line 306:
NEXT x
END FUNCTION
END PROGRAM</langsyntaxhighlight>
{{out}}
<pre>Similar to FreeBASIC entry.</pre>
 
==={{header|Yabasic}}===
<langsyntaxhighlight lang="yabasic">print " x p | -x^p -(x)^p (-x)^p -(x^p)"
print "----------------+---------------------------------------------"
for x = -5 to 5 step 10
Line 317:
print " ", x using "##", " ", p using "##", " | ", (-x^p) using "####", " ", (-(x)^p) using "####", " ", ((-x)^p) using "####", " ", (-(x^p)) using "####"
next p
next x</langsyntaxhighlight>
{{out}}
<pre>Same as FreeBASIC entry.</pre>
Line 323:
=={{header|F_Sharp|F#}}==
F# does not support the ** operator for integers but for floats:
<langsyntaxhighlight lang="fsharp">
printfn "-5.0**2.0=%f; -(5.0**2.0)=%f" (-5.0**2.0) (-(5.0**2.0))
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 332:
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: infix locals prettyprint sequences
sequences.generalizations sequences.repeating ;
 
Line 346:
5 2 row
5 3 row
5 narray simple-table.</langsyntaxhighlight>
{{out}}
<pre>
Line 357:
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">print " x p | -x^p -(x)^p (-x)^p -(x^p)"
print "----------------+---------------------------------------------"
for x as integer = -5 to 5 step 10
Line 364:
x;p;(-x^p);(-(x)^p);((-x)^p);(-(x^p))
next p
next x</langsyntaxhighlight>
{{out}}<pre>
x p | -x^p -(x)^p (-x)^p -(x^p)
Line 382:
 
Note that we can't call the method ''↑'' (or similar) because identifiers in Go must begin with a Unicode letter and using a non-ASCII symbol would be awkward to type on some keyboards in any case.
<langsyntaxhighlight lang="go">package main
 
import (
Line 404:
}
}
}</langsyntaxhighlight>
 
{{out}}
Line 414:
</pre>
=={{header|Haskell}}==
<langsyntaxhighlight Haskelllang="haskell">--https://wiki.haskell.org/Power_function
main = do
print [-5^2,-(5)^2,(-5)^2,-(5^2)] --Integer
Line 421:
print [-5^3,-(5)^3,(-5)^3,-(5^3)] --Integer
print [-5^^3,-(5)^^3,(-5)^^3,-(5^^3)] --Fractional
print [-5**3,-(5)**3,(-5)**3,-(5**3)] --Real</langsyntaxhighlight>
{{out}}
<pre>[-25,-25,25,-25]
Line 451:
In Julia, the ^ symbol is the power infix operator. The ^ operator has a higher precedence than the - operator,
so -5^2 is -25 and (-5)^2 is 25.
<langsyntaxhighlight lang="julia">
for x in [-5, 5], p in [2, 3]
println("x is", lpad(x, 3), ", p is $p, -x^p is", lpad(-x^p, 4), ", -(x)^p is",
lpad(-(x)^p, 5), ", (-x)^p is", lpad((-x)^p, 5), ", -(x^p) is", lpad(-(x^p), 5))
end
</langsyntaxhighlight>{{out}}
<pre>
x is -5, p is 2, -x^p is -25, -(x)^p is -25, (-x)^p is 25, -(x^p) is -25
Line 466:
=={{header|Lua}}==
Lua < 5.3 has a single double-precision numeric type. Lua >= 5.3 adds an integer numeric type. "^" is supported as an infix exponentiation operator for both types.
<langsyntaxhighlight lang="lua">mathtype = math.type or type -- polyfill <5.3
function test(xs, ps)
for _,x in ipairs(xs) do
Line 479:
if math.type then -- if >=5.3
test( {-5,5}, {2,3} ) -- "integer"
end</langsyntaxhighlight>
{{out}}
<pre> x type(x) p type(p) -x^p -(x)^p (-x)^p -(x^p)
Line 494:
=={{header|Maple}}==
 
<langsyntaxhighlight lang="maple">[-5**2,-(5)**2,(-5)**2,-(5**2)];
[-25, -25, 25, -25]
 
[-5**3,-(5)**3,(-5)**3,-(5**3)];
[-125, -125, -125, -125]</langsyntaxhighlight>
 
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">{-5^2, -(5)^2, (-5)^2, -(5^2)}
{-5^3, -(5)^3, (-5)^3, -(5^3)}</langsyntaxhighlight>
{{out}}
<pre>{-25, -25, 25, -25}
Line 511:
The infix exponentiation operator is defined in standard module “math”. Its precedence is less than that of unary “-” operator, so -5^2 is 25 and -(5^2) is -25.
 
<langsyntaxhighlight Nimlang="nim">import math, strformat
 
for x in [-5, 5]:
Line 517:
echo &"x is {x:2}, ", &"p is {p:1}, ",
&"-x^p is {-x^p:4}, ", &"-(x)^p is {-(x)^p:4}, ",
&"(-x)^p is {(-x)^p:4}, ", &"-(x^p) is {-(x^p):4}"</langsyntaxhighlight>
 
{{out}}
Line 528:
{{works with|Extended Pascal}}
Apart from the built-in (prefix) functions <tt>sqr</tt> (exponent&nbsp;=&nbsp;2) and <tt>sqrt</tt> (exponent&nbsp;=&nbsp;0.5) already defined in Standard “Unextended” Pascal (ISO standard 7185), ''Extended Pascal'' (ISO standard 10206) defines following additional (infix) operators:
<langsyntaxhighlight lang="pascal">program exponentiationWithInfixOperatorsInTheBase(output);
 
const
Line 591:
testRealPower(-5E0, 3);
testRealPower(+5E0, 3)
end.</langsyntaxhighlight>
{{out}}
=====> testIntegerPower <=====
Line 653:
=={{header|Perl}}==
Use the module <tt>Sub::Infix</tt> to define a custom operator. Note that the bracketing punctuation controls the precedence level. Results structured same as in Raku example.
<langsyntaxhighlight lang="perl">use strict;
use warnings;
use Sub::Infix;
Line 669:
}
print "\n";
}</langsyntaxhighlight>
{{out}}
<pre>x: -5 p: 2 | 1 + -$x**$p -24 | 1 + (-$x)**$p 26 | 1 + (-($x)**$p) -24 | (1 + -$x)**$p 36 | 1 + -($x**$p) -24 |
Line 690:
Phix has a power() function instead of an infix operator, hence there are only two possible syntaxes, with the obvious outcomes.<br>
(Like Go, Phix does not support operator overloading or definition at all.)
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">for</span> <span style="color: #000000;">x<span style="color: #0000FF;">=<span style="color: #0000FF;">-<span style="color: #000000;">5</span> <span style="color: #008080;">to</span> <span style="color: #000000;">5</span> <span style="color: #008080;">by</span> <span style="color: #000000;">10</span> <span style="color: #008080;">do</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">p<span style="color: #0000FF;">=<span style="color: #000000;">2</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">do</span>
Line 696:
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 706:
 
=={{header|QB64}}==
<langsyntaxhighlight lang="qb64">For x = -5 To 5 Step 10
For p = 2 To 3
Print "x = "; x; " p ="; p; " ";
Line 714:
Print Using ", -(x^p) is ####"; -(x ^ p)
Next
Next</langsyntaxhighlight>
{{out}}
<pre>
Line 723:
</pre>
=={{header|R}}==
<langsyntaxhighlight lang="rsplus">expressions <- alist(-x ^ p, -(x) ^ p, (-x) ^ p, -(x ^ p))
x <- c(-5, -5, 5, 5)
p <- c(2, 3, 2, 3)
Line 730:
setNames(lapply(expressions, eval), sapply(expressions, deparse)),
check.names = FALSE)
print(output, row.names = FALSE)</langsyntaxhighlight>
{{out}}
<pre> x p -x^p -(x)^p (-x)^p -(x^p)
Line 748:
Also add a different grouping: <code>(1 + -x){exponential operator}p</code>
 
<syntaxhighlight lang="raku" perl6line>sub infix:<↑> is looser(&prefix:<->) { $^a ** $^b }
sub infix:<^> is looser(&infix:<->) { $^a ** $^b }
 
Line 768:
print "\n";
}
}</langsyntaxhighlight>
{{out}}
<pre>Default precedence: infix exponentiation is tighter (higher) precedence than unary negation.
Line 789:
 
=={{header|REXX}}==
<langsyntaxhighlight lang="rexx">/*REXX program shows exponentition with an infix operator (implied and/or specified).*/
_= '─'; ! = '║'; mJunct= '─╫─'; bJunct= '─╨─' /*define some special glyphs. */
 
Line 812:
/*──────────────────────────────────────────────────────────────────────────────────────*/
@: parse arg txt, w, fill; if fill=='' then fill= ' '; return center( txt, w, fill)
</syntaxhighlight>
</lang>
{{out|output|text=&nbsp; when using the internal default input:}}
<pre>
Line 825:
</pre>
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">nums = [-5, 5]
pows = [2, 3]
nums.product(pows) do |x, p|
puts "x = #{x} p = #{p}\t-x**p #{-x**p}\t-(x)**p #{-(x)**p}\t(-x)**p #{ (-x)**p}\t-(x**p) #{-(x**p)}"
end
</syntaxhighlight>
</lang>
{{out}}
<pre>x = -5 p = 2 -x**p -25 -(x)**p -25 (-x)**p 25 -(x**p) -25
Line 839:
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">from itertools import product
 
xx = '-5 +5'.split()
Line 857:
for x, p in product(xx, pp):
texts2 = [t.replace(X, x).replace(P, p) for t in texts]
print(' ', '; '.join(f"{t2} =={eval(t2):4}" for t2 in texts2))</langsyntaxhighlight>
 
{{out}}
Line 877:
=={{header|Smalltalk}}==
Smalltalk has no prefix operator for negation. To negate, you have to send the number a "negated" message, which has higher precedence than any binary message. Literal constants may have a sign (which is not an operation, but part of the constant).
<langsyntaxhighlight lang="smalltalk">a := 2.
b := 3.
Transcript show:'-5**2 => '; showCR: -5**2.
Line 886:
Transcript show:'5**b => '; showCR: 5**b.
" Transcript show:'-(5**b) => '; showCR: -(5**b). -- invalid: syntax error "
" Transcript show:'5**-b => '; showCR: 5**-b. -- invalid: syntax error "</langsyntaxhighlight>
Using the "negated" message:
<langsyntaxhighlight lang="smalltalk">Transcript show:'5 negated**2 => '; showCR: 5 negated**2. "negates 5"
Transcript show:'5 negated**3 => '; showCR: 5 negated**3.
Transcript show:'5**2 negated => '; showCR: 5**2 negated. "negates 2"
Line 901:
Transcript show:'(-5**b) negated => '; showCR: (-5**b) negated.
Transcript show:'-5 negated**2 => '; showCR: -5 negated**2. "negates the negative 5"
Transcript show:'-5 negated**3 => '; showCR: -5 negated**3.</langsyntaxhighlight>
{{out}}
<pre>
Line 935:
 
Ideally what we'd like to do is to use a new operator such as '**' for exponentiation (because '^' is the bitwise exclusive or operator) but we can only overload existing operators with their existing precedence and so, for the purposes of this task, '^' is the only realistic choice.
<langsyntaxhighlight lang="ecmascript">import "/fmt" for Fmt
 
class Num2 {
Line 961:
Fmt.print("$s = $4s", ops[3], -(x^p))
}
}</langsyntaxhighlight>
 
{{out}}
10,327

edits