kempe-0.2.0.8: lib/gaussian.kmp
; Gaussian integers
import"prelude/fn.kmp"
type Gaussian { Gaussian Int Int }
unGaussian : Gaussian -- Int Int
=: [ {case | Gaussian ->} ]
grp : a b c -- b a c
=: [ dip(swap) ]
; perhaps unimpressive but I use this to test sizing
add : Gaussian Gaussian -- Gaussian
=: [ dip(unGaussian) unGaussian grp + dip(+) Gaussian ]
multRe : Gaussian Gaussian -- Int
=: [ dip(unGaussian) unGaussian dip(swap) * dip(*) - ]
multIm : Gaussian Gaussian -- Int
=: [ dip(unGaussian) unGaussian dip(*) swap dip(*) + ]
mult : Gaussian Gaussian -- Gaussian
=: [ dup2 multIm dip(multRe) Gaussian ]
conjugate : Gaussian -- Gaussian
=: [ unGaussian ~ Gaussian ]
%foreign kabi add
%foreign kabi conjugate
%foreign kabi mult