使用分段 MAPLE 2018 时如何在列表元素之间插入 'and'(代替逗号)

how to insert 'and'(in place of comma) in between elements of a list, when using piecewise MAPLE 2018

我有一个表示特定表达式的不等式列表,现在我想在分段函数中使用这些列表元素。

list1 :=[a < 0, c < 0, -2*k*a < b];
list2 :=[0 < c, a < 0, b < -2*k*a];
list3 :=[0 < a, b < -2*k*a, c < 0];

对于每个列表都有一个相应的表达式要显示,我的想法是使用分段函数显示如下

piecewise(a < 0 and c < 0 and -2*k*a < b, expr1, 0 < c and a < 0 and b < -2*k*a, expr2, 0 < a and b < -2*k*a and c < 0, expr3)

expr1,expr2,expr3分别是表达式。

我怎么可能做到这一点??

restart;

list1 :=[a < 0, c < 0, -2*k*a < b]:
list2 :=[0 < c, a < 0, b < -2*k*a]:
list3 :=[0 < a, b < -2*k*a, c < 0]:

您可以为 and 使用所谓的前缀形式(运算符形式),但请注意,这需要在其周围放置单个左引号(因为它是语言关键字)。

`and`(op(list1));

             a < 0 and c < 0 and -2 k a < b

所以 piecewise 可以类似地构造,

allconds := [list1, list2, list3]:
allexpr := [expr1, expr2, expr3]:

piecewise( seq( op( [ `and`(op(allconds[i])),
                      allexpr[i] ] ),
                i = 1 .. nops(allconds) ) );

       / expr1      a < 0 and c < 0 and -2 k a < b
       |                                          
      <  expr2      0 < c and a < 0 and b < -2 k a
       |                                          
       \ expr3      0 < a and b < -2 k a and c < 0

@acer 谢谢解答,

从昨天开始我也在研究其他方法,它有点复杂(有点类似于你的方法)理解起来和你的一样紧凑和简单。

因为,列表(list1、list2....)的数量可以根据表达式改变。我已将这些列表组合成一个大列表 bigList 的子集。术语是表达式列表

biglist :=[list1,list2,list3];
Terms :=[Expr1,Expr2,Expr3]


conditions := seq([apply(`and`, op(bigList[i]))], i = 1 .. nops(bigList)); 
sequence := seq([conditions[i][1], Terms[i]], i = 1 .. nops([conditions])); 

pieceWiseResult := piecewise(seq(op(sequence[i]), i = 1 .. nops([sequence])));

这也符合预期。如果有任何缺点或例外乐意倾听 谢谢