2014-04-03 18 views
1

我有一個列表,其中每個點是其3個座標列表:x,y和z。 但是其座標x和y中的一些點是「不好」的,我想清理它們。編寫一條規則來做到這一點有可能嗎?我試着:Mathematica:如何同時應用多個規則

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

,我已經看到,只有第一條規則適用於與壞X點,而不良y中的那些不改變。 Mathematica不給sintax錯誤,所以我認爲它是正確的。 有什麼建議嗎?謝謝。

回答

1

你只需要把規則放在一個列表中。此外,請注意使用RuleDelayed:>),它將變量x,y & z本地化,確保它們不會從程序中的其他位置獲取值。

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}}

+0

哦,非常感謝你!這些規則讓我瘋狂......這是一個與我習慣的非常不同的編程範例(c C++ java python php ...)。 –