package main import "math/cmplx" var monads = map[rune]Monad{ '+': identity, '-': negate, '×': direction, '÷': reciprocal, } func identity(d complex128) complex128 { return cmplx.Conj(d) } func negate(d complex128) complex128 { return -d } func direction(d complex128) complex128 { return d / complex(cmplx.Abs(d), 0) } func reciprocal(d complex128) complex128 { return 1.0 / d } var dyads = map[rune]Dyad{ '+': plus, '-': minus, '×': times, '÷': divide, } func plus(a, w complex128) complex128 { return a + w } func minus(a, w complex128) complex128 { return a - w } func times(a, w complex128) complex128 { return a * w } func divide(a, w complex128) complex128 { return a / w }