Как сделать класс или метатабельный для вычислимых многочленов - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь создать программу, которая вычисляет полиномиалы ​​с 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 ...

Скажите, пожалуйста, как создать класс для таблицы ...


...