我想阅读使用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 or \[Pi] or -> math.pi
-7.809692029744407*^-8 -> -7.809692029744407e-8
2.7067*^-8 + 2.268*^-8*I -> 2.7067e-8 + 2.268e-8*math.i
这不一定是一个难题,我只需要学习lua正则表达式。但是他们的很多情况(上面没有提到)要考虑到,我不想"重新发明轮子"。 Maybe I should,你会说......
但无论如何,是否有一个lua图书馆或专门用于此的项目?
答案 0 :(得分:4)
我不知道已经在那个方向做过什么,但我建议你考虑在Mathematica中建立一个Mathematica到Lua的翻译器,类似于“LuaForm”将其输出保存到文本文件中。它会使用现有的砖块(如FortranForm / CForm)来转换基本表达式(例如变量的数字和代数组合),并且可以在使用其他Mathematica功能时添加新规则。
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)}
我过去曾做过类似的代码(针对其他目标语言),结果令人满意。
答案 1 :(得分:1)
我wrote a translator可以将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符号。