使用递归删除haskell中列表的最大值

时间:2017-10-25 00:14:40

标签: haskell recursion

我是函数式编程的新手。我想实现一个方法,从Int列表中删除max元素,或者如果有max元素的重复,只需使用递归删除其中一个。例如,[2,1,4,4,3]应该成为[2,1,4,3]。没有对列表进行排序。

1 个答案:

答案 0 :(得分:1)

findMax函数计算list的最大元素,removeMax删除第一次出现的maximum元素。您可以将它们粘合在一起以计算您要查找的内容。

findMax :: [Int] -> Int -> Int
findMax [] acc = acc
findMax (h : rest) acc
  | h > acc = findMax rest h
  | otherwise = findMax rest acc


removeMax :: [Int] -> Int -> [Int]
removeMax []  mx = []
removeMax (h : rest) mx
  | h == mx = rest
  | otherwise = h : removeMax rest mx  

λ> findMax [2, 1, 4, 4, 3] 0
4
λ> removeMax [2, 1, 4, 4, 3] 4
[2,1,4,3]
λ>