gpt4 book ai didi

haskell - 有人可以向我详细解释这个简单的 Haskell 代码吗

转载 作者:行者123 更新时间:2023-12-02 18:26:09 25 4
gpt4 key购买 nike

我在一篇非常旧的帖子中发现了这个问题,并且不想在那里询问,因为它可能永远不会得到答复。

f xs = maximum . filter (< maximum xs) $ xs

我觉得是这样的

  • 获取过滤列表中的最大值
  • 小于列表的最大值

secondLargest :: (Num a, Ord a) => [a] -> a
secondLargest [] = error "Empty List"
secondLargest [x] = error "Empty List"
secondLargest xs
| ((maximum . filter (< maximum xs) $ xs) >= (maximum xs)) = maximum xs
| otherwise = (maximum . filter (< maximum xs) $ xs)

上面的代码是我现在正在使用的代码。基本上我无法对列表进行排序,只要最大和第二大元素不同,上面的代码就会找到第二大元素。

有人能帮忙解释一下吗?

最佳答案

其实很简单:

f xs = maximum . filter (< maximum xs) $ xs

假设xs = [1,2,3,4,5]。因此,最大 xs = 5。因此,我们有:

f [1,2,3,4,5] = maximum . filter (< 5) $ [1,2,3,4,5]

接下来,我们过滤掉所有小于5的元素。因此我们得到:

f [1,2,3,4,5] = maximum $ [1,2,3,4] -- notice that 5 is no more in the list

最后,我们得到剩余元素的最大值:

f [1,2,3,4,5] = 4

这恰好是原始列表的第二大元素。

关于haskell - 有人可以向我详细解释这个简单的 Haskell 代码吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39933396/

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