纯函数中的模式匹配

时间:2015-06-12 17:16:12

标签: lambda pattern-matching wolfram-mathematica anonymous-function wolfram-language

我需要定义一个带有两个参数的纯函数并返回它们的商。如果除数为0,那么我想返回0

如果我有一个命名函数,那么我会做

div[_, 0]   := 0
div[x_, y_] := x / y

如何在纯函数#1 / #2 &中对参数进行相同类型的模式匹配?

3 个答案:

答案 0 :(得分:4)

尝试类似

的内容
If[#2 == 0, 0, #1/#2] &

为你的纯粹功能。

答案 1 :(得分:2)

Switch可能有用,例如:

Switch[ # ,
       _String , StringLength[#] ,
       _List , Length[#] , 
       __ , Null ] & /@ { "abc", {1, 2, 3, 4}, Pi}
  

{3,4,Null}

答案 2 :(得分:1)

可以使用ReplaceCondition的组合来实现与纯函数的参数类似的模式匹配

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

找到更多方法和更广泛的讨论