Mathematica:如何一次应用多个规则

时间:2014-04-03 16:08:03

标签: wolfram-mathematica

我有一个点列表,其中每个点是其3个坐标的列表:x,y和z。 但是坐标x和y中的一些点是“坏的”,我想清理它们。是否可以编写一条规则来做到这一点?我试过了:

cleanAdjustedPoints[adjustedPoints_List] := adjustedPoints /. {x_, y_, z_}  /; x < 0 -> {0, y, z}; /; y > constB -> {x, constB, z};

我已经看到只有第一条规则应用于带有坏x的点,而带有坏y的点则不会改变。 Mathematica没有给出sintax错误,所以我认为它是正确的。 有什么建议?感谢。

1 个答案:

答案 0 :(得分:1)

您只需将规则放在列表中即可。另外,请注意RuleDelayed:>)使用本地化变量x,y和amp;确保他们不会从您计划中的其他地方获取价值。

cleanAdjustedPoints[adjustedPoints_List] :=
  adjustedPoints /. {{x_, y_, z_} /; x < 0 :> {0, y, z},
    {x_, y_, z_} /; y > constB :> {x, constB, z}};

constB = 5;

cleanAdjustedPoints[{{-1, 2, 3}, {4, 5, 6}, {7, 8, 9}}]
  

{{0,2,3},{4,5,6},{7,5,9}}