Я пытаюсь создать программу, которая вычисляет полиномиалы с Lua в LuaTeX. Например. (2x ^ 2 + 3xy + 4) * (x + 2y) =?
Поэтому я думаю начать с создания простого класса.
Следующий код предназначен для класса с одной переменной без коэффициента.
{"x", 2} <-> x ^ 2
do
ItemS = setmetatable({ -- MetaTable
__mul = function(a, b)
if getmetatable(a)==ItemS and getmetatable(b)==ItemS then
if a.var==b.var then return ItemS(a.var, a.deg + b.deg) end
end
end,
__div = function(a, b)
if getmetatable(a)==ItemS and getmetatable(b)==ItemS then
if a.var==b.var then return ItemS(a.var, a.deg - b.deg) end
end
end,
__pow = function(a, b)
if getmetatable(a)==ItemS and type(b) == "number" then
return ItemS(a.var, a.deg*b)
end
end,
__eq = function (a, b)
return (a.var==b.var and a.deg== b.deg)
end,
__concat = function(a, b)
if getmetatable(a) == ItemS then return a.var .. "^{" .. a.deg.."}" .. b end
return a .. b.var .. "^{" .. b.deg.."}"
end,
__tostring = function(a)
if getmetatable(a) == ItemS then
return a.var.."^{"..a.deg.."}"
end
return a.var.."^{"..a.deg.."}"
end
}, {
__call = function(z, a, b) return setmetatable({var = a, deg = b}, z) end
} )
end
Далее я хочу сделать многовариантный класс без коэффициента. Но я не знаю, как сделать класс с Lua таблицей ...
Я хочу сделать класс как таблица {{"x", 2}, {"y", 3}, .. .} <-> x ^ 2y ^ 3 ...
Скажите, пожалуйста, как создать класс для таблицы ...