任意表达式为
test := a*b*c+x+a*y+c*z;
output := SomeCommand(test, `+`);
output
[a*b*c,x,a*y,c*z];
是否有任何命令可以将其用作表达式。
我通过将其转换为字符串并使用StringSplit命令来做到这一点。将每个元素从列表转换为表达式并在for循环中进行。
test := convert(test, string)
with(StringTools):
output:=StringSplit(test, "+")
["a*b*c", "a*y", "c*z", "x"]
InertForm:-Parse(output[1])
value(output[1])
a*b*c
但是,我的兴趣是将其表达为表达式。有可能吗?
答案 0 :(得分:2)
您的问题有输入但没有输出。您应注意,分配给 test 的表达式的加数的存储顺序可能与在输入。
可以选择总和的加数,然后将它们放在列表中。下面是非常简单的代码。
加数在列表中的显示顺序与它们在内部存储的顺序匹配。
restart;
f := proc(expr)
if type(expr, `+`) then
[op(expr)];
else
expr;
end if;
end proc:
test := a*b*c+x+a*y+c*z;
test := a b c + a y + c z + x
f( test );
[a b c, a y, c z, x]
您是问所有这些(有点相关)问题的同一个家伙吗?还是参加相同的课程? Q1 Q2 Q3 Q4 如果是这样,您能告诉使用您真正要完成的工作吗?