Haskell中列表的递归函数

时间:2014-04-30 11:06:46

标签: list haskell recursion

我希望通过使用递归将List中的max和min值作为元组获取。我尝试使用下面的代码并且无法弄清楚它为什么不起作用。我真的很感激我的推理错误。非常感谢

seekMaxMin :: [Double] -> (Double,Double)
seekMaxMin [] = (0,0)
seekMaxMin [x] = (x,x)
seekMaxMin (x:rest) = (max x(seekMaxMin rest), min x(seekMaxMin rest))

2 个答案:

答案 0 :(得分:5)

seekMaxMin返回最小值和最大值的元组,但在你的 你假装的最后一个方程式它只返回最大值,其次是 它只返回最小值。您可以使用模式将它们都提取出来 摆脱列表中的冗余行走。

seekMaxMin (x:rest) = (max x rmax, min x rmin)
    where (rmax, rmin) = seekMaxMin(rest)

我也有点反对制作一个空的双打名单的分数 0,但它可能适用于此功能的任何目的。

答案 1 :(得分:0)

Monocell的回答是我推荐的。但是,看看你的代码,我认为你可能想到的逻辑是:

seekMaxMin :: [Double] -> (Double,Double)
seekMaxMin [] = (0,0)
seekMaxMin [x] = (x,x)
seekMaxMin (x:rest) = (maximum $ x:[fst $ seekMaxMin rest], minimum $ x:[snd $ seekMaxMin rest])