我需要定義一個純函數,它接受兩個參數並返回它們的商。如果除數是0
那麼我想返回0
。純函數中的模式匹配
如果我有一個名爲函數,那麼我會做
div[_, 0] := 0
div[x_, y_] := x/y
如何做同樣的圖案在一個純函數#1/#2 &
的參數匹配?
我需要定義一個純函數,它接受兩個參數並返回它們的商。如果除數是0
那麼我想返回0
。純函數中的模式匹配
如果我有一個名爲函數,那麼我會做
div[_, 0] := 0
div[x_, y_] := x/y
如何做同樣的圖案在一個純函數#1/#2 &
的參數匹配?
Switch
可能是有用的,例如:
Switch[ # ,
_String , StringLength[#] ,
_List , Length[#] ,
__ , Null ] & /@ { "abc", {1, 2, 3, 4}, Pi}
{3,4,NULL}
嘗試像
If[#2 == 0, 0, #1/#2] &
您的純函數。
人們可以使用的Replace
和Condition
的組合,以實現類似的模式匹配上純函數的論點
Replace[_, {_ /; #2 == 0 -> 0, _ :> #1/#2}] &
例如
Replace[_, {_ /; #2 == 0 -> 0, _ :> #1/#2}] &[a, 2]
a/2
和
Replace[_, {_ /; #2 == 0 -> 0, _ :> #1/#2}] &[a, 0]
0
更多方法和更多擴展討論可以在https://mathematica.stackexchange.com/questions/3174/using-patterns-in-pure-functions
謝謝。看起來我不能在純函數中進行模式匹配,對吧?我的例子是人爲設計的。是的,我可以檢查第二個參數是否爲零。我一直在尋找一種模式匹配的方法。 – akonsu
'如果[MatchQ [#,pattern],...]&'...或者您可能想要查看'Switch' – agentp
@agentp謝謝,我使用了'Switch',請發表評論作爲回答 – akonsu