将Mathematica函数转换为Lua。

我想阅读使用 Mathematica 函数“Save”写入的文件。里面有些表达式我想要在 lua 中翻译。

例如:mathematica - > lua

foo[bar _]:= a * bar + b     -> function foo(bar) return a * bar + b end
foo [bar] = a * bar + b      -> foo [bar] = a * bar + b
foo = N [bar]               -> foo = bar
Pi 或 \[Pi] 或              -> math.pi
-7.809692029744407 * ^ -8   -> -7.809692029744407e-8
2.7067 * ^ -8 +2.268 * ^ -8 * I-> 2.7067e-8 +2.268e-8 * math.i

这不是一个难题,只需要学习 lua 正则表达式。但是有很多情况(未在上面提到)需要考虑,我不想“重新发明轮子”。

也许我应该,你会说...

但是,有没有一个专门用于此的 lua 库或项目?

点赞
用户342033
用户342033

我不知道是否已经有类似的工作,但我建议你考虑在Mathematica中构建一个将Mathematica代码翻译成Lua代码的转换器,类似于一个名为"LuaForm"的工具,将转换后的代码保存到文本文件中。它将使用现有的Brick,如FortranForm/CForm,将基本表达式(如数字和变量的代数组合)转换为Lua代码,你也可以根据需要添加新的规则。

CForm /@ {Pi, \[Pi], a b+3x, -7.809692029744407*^-8, 2.7067*^-8 + 2.268*^-8*I}

{Pi,Pi,a*b + 3*x,-7.809692029744407e-8,Complex(2.7067e-8,2.268e-8)}

我以前也做过类似的代码(针对其他目标语言),效果不错。

2015-03-04 09:46:49
用户975097
用户975097

写了一个翻译器,能将一个Mathematica的子集转换成Lua和其他几种语言。

这仍然是一个正在进行中的工作,但它已经可以翻译简单的Mathematica函数,比如这个:

doSomething[a_,b_] :=
    If[a<3,
        (a =  a + 1;a),a-1]

这是该函数在Lua中的输出:

function doSomething(a,b)
    if a<3 then
        a=a+1
        return a
    else
        return a-1
    end
end

我还计划编写一个将Mathematica的子集转换为symmath-lua符号表示的翻译器。

2017-11-20 04:50:52