@class Complex { &[r i] @: { ^r || r 0 ^i || i 0 ^m +@sq^r @sq^i } add &o @new Complex[+ ^r o.r + ^i o.i] mul &o @new Complex[-* ^r o.r * ^i o.i +* ^r o.i * ^i o.r] neg &^ @new Complex[@-^r @-^i] inv &^ @new Complex[/ ^r ^m / @-^i ^m] toString &^?{ =^i 0 "{^r}" =^r 0 "{^i}i" >^i 0 "{^r} + {^i}i" "{^r} - {@-^i}i" } } @vars { a @new Complex[5 3] b @new Complex[4 3N] } @each &x !console.log x [ "({a}) + ({b}) = {!a.add b}" "({a}) * ({b}) = {!a.mul b}" "-1 * ({b}) = {b.neg.}" "({a}) - ({b}) = {!a.add b.neg.}" "1 / ({b}) = {b.inv.}" "({!a.mul b}) / ({b}) = {`!.mul b.inv. !a.mul b}" ]