Я хочу читать файлы, написанные с использованием функции «Сохранить» в системе Mathematica. Внутри это выражения, которые я хотел бы перевести на 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. Но их много (не упомянутых выше) случаев, которые нужно учитывать, и я не хочу «изобретать велосипед». Может мне стоит < / a>, вы бы сказали ...

Но в любом случае, есть ли библиотека lua или проект, посвященный этому?

2
jvtrudel 4 Мар 2015 в 01:00

2 ответа

Лучший ответ

Я не знаю, что уже сделано в этом направлении, но я бы порекомендовал вам подумать о создании переводчика Mathematica to Lua в Mathematica, что-то вроде «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)}

Раньше я делал аналогичный код (для других целевых языков) с удовлетворительными результатами.

4
ogerard 4 Мар 2015 в 09:46

I написал переводчик, который может преобразовывать подмножество 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 .

1
Anderson Green 16 Мар 2018 в 22:48