Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://angg.twu.net/LUA/complex.lua.html
--   http://angg.twu.net/LUA/complex.lua
--           (find-angg "LUA/complex.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/complex.lua"))


Complex = Class {
  type = "Complex",
  new  = function (a, b) return Complex {re=a, im=b} end,
  from = function (o)
      if type(o) == "number" then return Complex.new(o, 0) end
      if otype(o) == "Complex" then return o end
      error("Can't convert to complex")
    end,
  --
  __add = function (z, w)
      z, w = Complex.from(z), Complex.from(w)
      local a,b, c,d = z.re,z.im, w.re,w.im
      return Complex.new(a+c, b+d)
    end,
  __mul = function (z, w)
      z, w = Complex.from(z), Complex.from(w)
      local a,b, c,d = z.re,z.im, w.re,w.im
      return Complex.new(a*c-b*d, a*d+b*c)
    end,
  __unm = function (z) return z*-1 end,
  __sub = function (z, w) return z+(-w) end,
  __tostring = function (o) return o:tostring() end,
  --
  __index = {
    tostring = function (o)
        if o.im == 0 then return pformat("%s",  o.re) end
        if o.re == 0 then return pformat("%si", o.im) end
        local optplus = (o.im > 0) and "+" or ""
        return pformat("%s%s%si", o.re, optplus, o.im)
      end,
  },
}


--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "complex.lua"

z = Complex.new(2,3)
PP(z)
= z:tostring()
= z
= z*z
= z*z*z
= z*z*z*z

--]]



-- Local Variables:
-- coding:  utf-8-unix
-- End: