将mathematica函数转换为lua

时间:2015-03-03 22:00:31

标签: parsing lua wolfram-mathematica translation

我想阅读使用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图书馆或专门用于此的项目?

2 个答案:

答案 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符号。