Gal: небольшая программа на C++ для преобразования вывода Maple в корректный математический ввод.
Проблема: выражения в квадратных скобках, как в следующем примере: sin (-1 / (- 1 + x) / x) должен стать sin [-1 / (- 1 + x) / x]
Как видите, нужно заменить только скобки для самой функции sin. Есть ли способ сделать это, не касаясь внутреннего содержимого скобок, используя regex_replace ()? Сам не мог придумать.
Фактический ввод будет гораздо более длинными выражениями, с файлами размером до нескольких килобайт. Отсюда необходимость эффективного преобразования.
Заранее спасибо!
Очень жаль, что в примере есть 2 выражения, ни одно из которых не заключено в квадратные скобки правильно!
Похоже, он хочет использовать C++ в качестве промежуточного процессора. Quesion может потребоваться пояснение. В любом случае смотрите здесь mathematica.stackexchange.com/q/163184/2079 и mathematica.stackexchange.com/q/31804/2079
Если у вас есть выходные данные Maple, потому что вы генерируете их в Maple, то, возможно, вы можете одновременно сгенерировать желаемый результат.
Трудно сделать его более применимым к вашей более широкой цели с помощью всего лишь одного краткого примера.
Использование одинарных правых кавычек и одноуровневых вызовов eval
предназначено для предотвращения нежелательной оценки (например, Maple вытащил бы ведущий знак минус из вызова sin
в противном случае).
ee := 'sin'(-1/(-1+x)/x):
lprint( eval(ee,1) );
sin(-1/(-1+x)/x)
ff := subsindets(eval(ee,1),specfunc(sin),u->'Sin'[op(u)]):
lprint( eval(ff,1) );
Sin[-1/(-1+x)/x]
sprintf("%a", eval(ff,1) );
"Sin[-1/(-1+x)/x]"
Или, если ваш оригинал представляет собой строку, а не неоцененный вызов функции,
restart;
s: = "sin(-1/(-1+x)/x)";
s := "sin(-1/(-1+x)/x)"
gg:=parse(s):
lprint( eval(gg,1) );
sin(-1/(-1+x)/x)
ff := subsindets(eval(gg,1),specfunc(sin),u->'Sin'[op(u)]):
lprint( eval(ff,1) );
Sin[-1/(-1+x)/x]
sprintf("%a", eval(ff,1) );
"Sin[-1/(-1+x)/x]"
вы можете сделать это на множестве языков. Вы должны сузить свой вопрос до одного языка, показать, что вы пробовали до сих пор, и почему у вас возникли проблемы с вашим кодом.