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