RosettaCodeData/Task/Element-wise-operations/Haskell/element-wise-operations-2.hs

38 lines
897 B
Haskell

procedure main()
a := [[1,2,3],[4,5,6],[7,8,9]]
b := [[9,8,7],[6,5,4],[3,2,1]]
showMat(" a: ",a)
showMat(" b: ",b)
showMat("a+b: ",mmop("+",a,b))
showMat("a-b: ",mmop("-",a,b))
showMat("a*b: ",mmop("*",a,b))
showMat("a/b: ",mmop("/",a,b))
showMat("a^b: ",mmop("^",a,b))
showMat("a+2: ",msop("+",a,2))
showMat("a-2: ",msop("-",a,2))
showMat("a*2: ",msop("*",a,2))
showMat("a/2: ",msop("/",a,2))
showMat("a^2: ",msop("^",a,2))
end
procedure mmop(op,A,B)
if (*A = *B) & (*A[1] = *B[1]) then {
C := [: |list(*A[1])\*A[1] :]
a1 := create !!A
b1 := create !!B
every (!!C) := op(@a1,@b1)
return C
}
end
procedure msop(op,A,s)
C := [: |list(*A[1])\*A[1] :]
a1 := create !!A
every (!!C) := op(@a1,s)
return C
end
procedure showMat(label, m)
every writes(label | right(!!m,5) | "\n")
end