|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://angg.twu.net/LUA/arithfbs.lua.html
-- http://angg.twu.net/LUA/arithfbs.lua
-- (find-angg "LUA/arithfbs.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
-- Original: http://lua-users.org/lists/lua-l/2017-02/msg00139.html
MT={}
V={}
N=0
function var(name)
local t={name=name}
V[name]=t
_G[name]=t
return setmetatable(t,MT)
end
function S(a)
if type(a)=="table" then return a.name else return a or 0 end
end
function arithfb(a,b,op)
local i=op .. "(" .. S(a) .. "," .. S(b) .. ")"
if V[i]==nil then N=N+1; V[i]=var("t"..N,N); print(V[i].name ..'='..i) end
return V[i]
end
t={"add", "sub", "mul", "div", "unm", "pow"}
for i,v in next,t do
MT["__"..v]=function (a,b) return arithfb(a,b,v) end
end
function vars(s)
for x in string.gmatch(s,"(%w+)") do var(x) end
end
vars"x,y"
return 2/3*x +(x^2-y^2)/(3*(x^2+y^2)), 2/3*y-2*(x*y)/(3*(x^2+y^2))
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "arithfbs.lua"
--]]