Haskell - 列表中的最大数字

时间:2017-08-28 10:35:36

标签: haskell

我想在整数列表中找到最大整数值。以下是我的代码 -

maximum :: [Int] -> Int
maximum [x] = x
maximum (x:xs) =
 | (maximum xs) > x = maximum xs
 | otherwise = x

我不想使用内置函数max。所以,我没有用过: 最大值(x:xs)=最大x(最大xs)

为什么代码没有执行?

3 个答案:

答案 0 :(得分:3)

在第一个=之前您还有一个|

maximum (x:xs) | (maximum xs) > x = maximum xs
               | otherwise        = x

请注意,您计算两次maximum xs,这可能会使您的代码慢慢运行非常

答案 1 :(得分:1)

您应该在病房阻止之前删除=。 现在,为了使你的功能正常:

您可以fold列表:

maximum' :: Ord a => [a] -> a
maximum' = foldr1 (\x y ->if x >= y then x else y)

对于递归版本(不进行双重检查):

maximum'' :: Ord a => [a] -> a
maximum'' [x]       = x
maximum'' (x:x':xs) = maximum' ((if x >= x' then x else x'):xs)

如果你想要病房:

maximum'' :: Ord a => [a] -> a
maximum'' [x]       = x
maximum'' (x:x':xs) | x >= x'   = maximum' (x:xs)
maximum'' (x:x':xs) | otherwise = maximum' (x':xs)

这里有live example

答案 2 :(得分:0)

首先出现语法错误,您需要在wiredep之后移除=

其次,函数maximum (x:xs)maximum冲突,我建议您重命名,例如:

Main.maximum