gpt4 book ai didi

haskell - Haskell 中的仿函数设计模式

转载 作者:行者123 更新时间:2023-12-04 02:33:03 25 4
gpt4 key购买 nike

我很抱歉没有为这个问题想出一个好的标题。我在表达我的需要时遇到了一些麻烦。我在 Haskell 中有一个简单的问题,我想知道解决它的最佳方法是什么。

假设我有一个数字列表:[-3,2,1,2] .我想返回具有最高绝对值的值。也就是说,我想返回-3。所以我想要:

f = maximum . map abs

当然,问题是返回计算值 (3) 而不是原始值 (-3)。

我可以想办法做到这一点,也许将原始列表映射到(originalValue,calculatdValue)的元组,找到我的函数(最大值)返回其snd的元组,然后返回该元组的fst。

但是对于这样一个简单的问题,这似乎是很多“管道”,我想知道是否有一些我遗漏的抽象可以解决这个问题。也就是说,我一直都在做这个一般的程序,我想要一些巧妙的方法:
  • 我想列出元素 list 。
  • 我想将它们映射到某个值(比如说绝对值)
  • 然后我想根据一些标准选择一个(假设我想要最大值或最小值)。
  • 但后来我想返回原始值。 (如果列表是 [-3,2,1,2] 并且我想返回具有最高绝对值的值,那么我将返回 -3)。

  • 有这个库函数吗?有一个仿函数或单子(monad)吗?

    我想我想要一个带有签名的函数:
    f :: ([b] -> b) -> (a -> b) -> [a] -> a

    IE。
    f maximum abs [-3,2,1,2]

    这对我来说感觉非常“功能性”,或者可能是“单调的”。

    最佳答案

    使用带有比较函数的 maximumBy。然后,您可以传递一些比较您想要的方式的函数。

    maximumBy (compare `on` abs)

    关于haskell - Haskell 中的仿函数设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517917/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com