能否在Lua中将用户输入作为数学运算读取?

我正在尝试编写一个接受函数形式输入的程序,例如 "f(x) = 2*x + 5",并将其计算为常规方程。

我目前所拥有的是:

print("输入任何函数") --模糊占位符
x=50
str=string.gsub(io.read(), "x", tostring(x))
print(str*1)

当您在输入中拥有变量x时,它可以正常运行,并将其替换为以前设置的x变量。当您输入"1+1"等内容时,它将不被接受。

有没有一种方法可以将"1+1"之类的输入转换为可计算的2,而不仅仅是给定的字符串?

我的问题实际上是: 在只读取为字符串的“数字运算符数字”格式的任何用户输入都没有计算公式的情况下,是否有任何解决方法?

原文链接 https://stackoverflow.com/questions/69663851

点赞
stackoverflow用户7396148
stackoverflow用户7396148

你可以使用更详细的 gsub 函数并将函数作为 Lua 代码加载。 由于 1 + 1 的格式不是真正的函数格式,因此当函数只是一个操作时,我们需要添加一些额外的处理。

function evaluateFunction(funcStr, x)

  funcStr = "return " .. funcStr
  funcStr, replaced = funcStr:gsub("f%(", "function(")
  funcStr = funcStr:gsub("=", "return")

  if replaced ~= 0 then
    funcStr = funcStr .. " end"
  end

  print(funcStr)

  local func = load(funcStr)()
  if type(func) == "function" then
    print(func(x))
  else
    print(func)
  end
end

evaluateFunction("f(x) = 2*x + 5", 50)
evaluateFunction("f() = 2*5")
evaluateFunction("1 + 1")

输出:

return function(x) return 2*x + 5 end

105

return function() return 2*5 end

10

return 1 + 1

2

2021-10-21 14:52:47