【问题标题】:pattern matching in pure functions纯函数中的模式匹配
【发布时间】:2015-06-12 17:16:11
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    试试类似的东西

    If[#2 == 0, 0, #1/#2] &
    

    为你的纯函数。

    【讨论】:

    • 谢谢。看起来我不能在纯函数中进行模式匹配,对吧?我的例子是人为的。是的,我可以检查第二个参数是否为零。我一直在寻找一种进行模式匹配的方法。
    • If[MatchQ[ #, pattern ], ... ] & ... 或者你可能想看看Switch
    • @agentp 谢谢,我用过Switch,请发表此评​​论作为答案
    【解决方案2】:

    Switch 可能有用,例如:

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

    {3, 4, 空}

    【讨论】:

      【解决方案3】:

      可以使用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找到

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-25
        • 2016-04-26
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多