我希望通过使用递归将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))
答案 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])