Element-wise operations: Difference between revisions

Content deleted Content added
SqrtNegInf (talk | contribs)
m →‎{{header|Perl 6}}: added custom infix op, revised output format
m →‎{{header|REXX}}: changed/added comments and whitespace, changed indentations.
Line 1,396: Line 1,396:
=={{header|REXX}}==
=={{header|REXX}}==
===discrete===
===discrete===
<lang rexx>/*REXX program multiplies two matrixes together, shows matrixes & result*/
<lang rexx>/*REXX program multiplies two matrixes together, displays the matrixes and the result.*/
m=(1 2 3) (4 5 6) (7 8 9)
m=(1 2 3) (4 5 6) (7 8 9)
w=words(m); do k=1; if k*k>=w then leave; end /*k*/; rows=k; cols=k
w=words(m); do k=1; if k*k>=w then leave; end /*k*/; rows=k; cols=k

call showMat M, 'M matrix'
call showMat M, 'M matrix'
answer=matAdd(m, 2 ); call showMat answer, 'M matrix, added 2'
answer=matAdd(m, 2 ); call showMat answer, 'M matrix, added 2'
answer=matSub(m, 7 ); call showMat answer, 'M matrix, subtracted 7'
answer=matSub(m, 7 ); call showMat answer, 'M matrix, subtracted 7'
answer=matMul(m, 2.5); call showMat answer, 'M matrix, multiplied by 2½'
answer=matMul(m, 2.5); call showMat answer, 'M matrix, multiplied by 2½'
answer=matPow(m, 3 ); call showMat answer, 'M matrix, cubed'
answer=matPow(m, 3 ); call showMat answer, 'M matrix, cubed'
answer=matDiv(m, 4 ); call showMat answer, 'M matrix, divided by 4'
answer=matDiv(m, 4 ); call showMat answer, 'M matrix, divided by 4'
answer=matIdv(m, 2 ); call showMat answer, 'M matrix, integer halved'
answer=matIdv(m, 2 ); call showMat answer, 'M matrix, integer halved'
answer=matMod(m, 3 ); call showMat answer, 'M matrix, modulus 3'
answer=matMod(m, 3 ); call showMat answer, 'M matrix, modulus 3'
exit /*stick a fork in it, we're done.*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
/*──────────────────────────────────SHOWMAT subroutine──────────────────*/
showMat: parse arg @, hdr; say
matAdd: parse arg @,#; call mat#; do j=1 for w; !.j=!.j+#; end; return mat@()
L=0; do j=1 for w; L=max(L,length(word(@,j))); end
matSub: parse arg @,#; call mat#; do j=1 for w; !.j=!.j-#; end; return mat@()
matMul: parse arg @,#; call mat#; do j=1 for w; !.j=!.j*#; end; return mat@()
say center(hdr, max(length(hdr)+4, cols*(L+1)+4), "─")
matDiv: parse arg @,#; call mat#; do j=1 for w; !.j=!.j/#; end; return mat@()
n=0
do r =1 for rows; _=
matIdv: parse arg @,#; call mat#; do j=1 for w; !.j=!.j%#; end; return mat@()
do c=1 for cols; n=n+1; _=_ right(word(@,n),L); end; say _
matPow: parse arg @,#; call mat#; do j=1 for w; !.j=!.j**#; end; return mat@()
matMod: parse arg @,#; call mat#; do j=1 for w; !.j=!.j//#; end; return mat@()
end
mat#: w=words(@); do j=1 for w; !.j=word(@,j); end; return
return
mat@: @=!.1; do j=2 to w; @=@ !.j; end; return @
/*──────────────────────────────────one-liner subroutines───────────────*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
matAdd: arg @,#; call mat#; do j=1 for w; !.j=!.j+#; end; return mat@()
showMat: parse arg @, hdr; L=0; say
matSub: arg @,#; call mat#; do j=1 for w; !.j=!.j-#; end; return mat@()
matMul: arg @,#; call mat#; do j=1 for w; !.j=!.j*#; end; return mat@()
do j=1 for w; L=max(L,length(word(@,j))); end
say center(hdr, max(length(hdr)+4, cols*(L+1)+4), "─")
matDiv: arg @,#; call mat#; do j=1 for w; !.j=!.j/#; end; return mat@()
n=0
matIdv: arg @,#; call mat#; do j=1 for w; !.j=!.j%#; end; return mat@()
matPow: arg @,#; call mat#; do j=1 for w; !.j=!.j**#; end; return mat@()
do r =1 for rows; _=
matMod: arg @,#; call mat#; do j=1 for w; !.j=!.j//#; end; return mat@()
do c=1 for cols; n=n+1; _=_ right(word(@,n),L); end; say _
mat#: w=words(@); do j=1 for w; !.j=word(@,j); end; return
end
mat@: @=!.1; do j=2 to w; @=@ !.j; end; return @</lang>
return</lang>
'''output'''
{{out}}
<pre style="height:55ex">
<pre style="height:63ex">
──M matrix──
──M matrix──
1 2 3
1 2 3
Line 1,472: Line 1,471:


===generalized===
===generalized===
<lang rexx>/*REXX program multiplies two matrixes together, shows matrixes & result*/
<lang rexx>/*REXX program multiplies two matrixes together, displays the matrixes and the result. */
m=(1 2 3) (4 5 6) (7 8 9)
m=(1 2 3) (4 5 6) (7 8 9)
w=words(m); do k=1; if k*k>=w then leave; end /*k*/; rows=k; cols=k
w=words(m); do k=1; if k*k>=w then leave; end /*k*/; rows=k; cols=k

call showMat M, 'M matrix'
call showMat M, 'M matrix'
ans=matOp(m, '+2' ); call showMat ans, 'M matrix, added 2'
ans=matOp(m, '+2' ); call showMat ans, "M matrix, added 2"
ans=matOp(m, '-7' ); call showMat ans, 'M matrix, subtracted 7'
ans=matOp(m, '-7' ); call showMat ans, "M matrix, subtracted 7"
ans=matOp(m, '*2.5' ); call showMat ans, 'M matrix, multiplied by 2½'
ans=matOp(m, '*2.5' ); call showMat ans, "M matrix, multiplied by 2½"
ans=matOp(m, '**3' ); call showMat ans, 'M matrix, cubed'
ans=matOp(m, '**3' ); call showMat ans, "M matrix, cubed"
ans=matOp(m, '/4' ); call showMat ans, 'M matrix, divided by 4'
ans=matOp(m, '/4' ); call showMat ans, "M matrix, divided by 4"
ans=matOp(m, '%2' ); call showMat ans, 'M matrix, integer halved'
ans=matOp(m, '%2' ); call showMat ans, "M matrix, integer halved"
ans=matOp(m, '//3' ); call showMat ans, 'M matrix, modulus 3'
ans=matOp(m, '//3' ); call showMat ans, "M matrix, modulus 3"
ans=matOp(m, '*3-1' ); call showMat ans, 'M matrix, tripled, less one'
ans=matOp(m, '*3-1' ); call showMat ans, "M matrix, tripled, less one"
exit /*stick a fork in it, we're done.*/
exit /*stick a fork in it, we"re all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
/*──────────────────────────────────SHOWMAT subroutine──────────────────*/
showMat: parse arg @, hdr; say
matOp: parse arg @,#; call mat#; do j=1 for w; interpret '!.'j"=!."j #;end; return mat@()
L=0; do j=1 for w; L=max(L,length(word(@,j))); end
mat#: w=words(@); do j=1 for w; !.j=word(@,j); end; return
mat@: @=!.1; do j=2 to w; @=@ !.j; end; return @
say; say center(hdr,max(length(hdr)+4,cols*(L+1)+4),"─")
/*──────────────────────────────────────────────────────────────────────────────────────*/
n=0
showMat: parse arg @, hdr; say
do r =1 for rows; _=
do c=1 for cols; n=n+1; _=_ right(word(@,n),L); end; say _
L=0; do j=1 for w; L=max(L,length(word(@,j))); end
say; say center(hdr,max(length(hdr)+4,cols*(L+1)+4),"─")
end
n=0
return
do r =1 for rows; _=
/*──────────────────────────────────one-liner subroutines───────────────*/
matOp: arg @,#;call mat#; do j=1 for w; interpret '!.'j"=!."j #;end; return mat@()
do c=1 for cols; n=n+1; _=_ right(word(@,n),L); end; say _
mat#: w=words(@); do j=1 for w; !.j=word(@,j); end; return
end
mat@: @=!.1; do j=2 to w; @=@ !.j; end; return @</lang>
return</lang>
'''output'''
{{out}}
<pre style="height:55ex">
<pre style="height:63ex">
──M matrix──
──M matrix──
1 2 3
1 2 3