问题是这样的:
编写一个带整数列表并返回其长度的函数 列表中的第二大整数。
我可以用两个函数解决这个问题,但有没有只使用一个函数的解决方案呢?
任何帮助表示赞赏! 谢谢!
答案 0 :(得分:4)
答案 1 :(得分:3)
已编辑使用@ThomasM.DuBuisson's建议
您可以通过使用折叠找到最大值来解决此问题。使用
可以非常简单地实现Maxmymaximum :: Ord a => [a] -> a
mymaximum xs = foldl searcher (head xs) xs
where
searcher :: Ord a => a -> a -> a
searcher a b
| a > b = a
| otherwise = b
所以我们可以通过跟上两个最大的值来实现它(注意我们必须用元组“播种”折叠):
nextmaximum :: Ord a => [a] -> a
nextmaximum xs = fst $ foldl searcher (h, h) xs
where
h = head xs
searcher :: (Ord a) => (a, a) -> a -> (a, a)
searcher (s, f) x = (min f (max s x), max f x)
答案 2 :(得分:2)
您可以一起编写各个功能。这既不高效也不健壮,但写起来很容易:
f xs = maximum . filter (< maximum xs) $ xs
答案 3 :(得分:1)
head . (!!1) . group . sortBy (flip compare) $ [1,1,2,3,4,4,4,5,5,6,6,6,6]
5