Gal:一个小型的c ++程序,用于将maple输出转换为有效的mathematica输入。
问题:括号中的表达式如下例所示: sin(-1 /( - 1 + x)/ x)应该变为sin [-1 /( - 1 + x)/ x]
如您所见,应该替换sin函数本身的唯一括号。有没有办法在不触及括号内部内容的情况下使用regex_replace()?我自己无法想出来。
实际输入将是更长的表达式,文件大小可达数kb。因此需要有效的转换。
提前谢谢!
答案 0 :(得分:2)
如果你有Maple输出,因为你是在Maple中生成它,那么也许你可以同时生成所需的输出。
仅通过一个简短的例子,很难让它更广泛地适用于更广泛的目标。
使用单右引号和1级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]"