【问题标题】:Haskell Rewriting Min ClassHaskell 重写最小类
【发布时间】:2023-03-05 17:32:02
【问题描述】:

我对 Haskell 很陌生,我正在编写一个类似于 min 的函数,而不是只接受 2 个值,它会接受 3。我已经制定了如下所示的类:

min3 :: a -> a -> a -> a

但是,在编写了多少个输入变量之后,我会在函数本身中添加什么?

min3 x y z = 

这可能非常简单,我遗漏了一些东西,但如果你能帮助我,我将不胜感激。

谢谢!

【问题讨论】:

  • min3 x y z = min (min x y) z
  • 听起来像是功课。

标签: function class haskell


【解决方案1】:

你也可以这样写:

min3 :: Ord a => a -> a -> a -> a
min3 = ((min .) .) min

【讨论】:

    【解决方案2】:

    一个实现

    min3 :: Ord a => a -> a -> a -> a
    min3 x y z = min x $ min y z
    

    注意事项:

    • 在类型定义中,您必须编写 Ord a => ...,因为您的参数应该是可排序的,即必须为它们定义 min 函数。

    @Lee 提供了一个无点实现,也可以写成

    导入 Data.Composition ((.:))

    min3 :: Ord a => a -> a -> a -> a
    min3 =  min .: min
    

    注意:f .: g(f .) . g 的快捷方式,在Data.Composition 中定义

    【讨论】:

      【解决方案3】:

      另一种实现:

      min3 x y z = head $ sort [x,y,z]
      

      这可以很容易地生成一个可以在列表中找到最小值的函数:

      minimum = head . sort
      

      Data.List 给出a different implementation of minimum

      【讨论】:

      • 不用写minimum = head . sort吗?
      • @tampis 糟糕,已修复。谢谢。
      猜你喜欢
      • 2015-09-03
      • 1970-01-01
      • 2023-03-25
      • 2015-07-15
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多