Tha*_*tos 6 algorithm haskell list
我需要创建一个带有列表和元素的函数,并返回一个列表,其中第一次出现的元素被删除:类似于
removeFst [1,5,2,3,5,3,4,5,6] 5
[1,2,3,5,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
我尝试的是:
main :: IO()
main = do
putStr ( show $ removeFst [1,5,2,3,5,3,4,5,6] 5)
removeFst :: [Int] -> Int -> [Int]
removeFst [] m = []
removeFst [x] m
| x == m = []
| otherwise = [x]
removeFst (x:xs) m
| x == m = xs
| otherwise = removeFst xs m
Run Code Online (Sandbox Code Playgroud)
但这不起作用......它返回没有第一个元素的列表.我想我应该进行递归调用,使列表如下:
removeFst (x:xs) m
| x == m = xs
| otherwise = removeFst (-- return the whole list till element x) m
Run Code Online (Sandbox Code Playgroud)
Dan*_*her 12
你非常接近,你错过的是在第一个找到m结果列表之前添加元素,
removeFst :: [Int] -> Int -> [Int]
removeFst [] m = []
removeFst (x:xs) m
| x == m = xs
| otherwise = x : removeFst xs m
-- ^^^ keep x /= m
Run Code Online (Sandbox Code Playgroud)
请注意,单元素列表的特殊情况是多余的.
还要注意的是removeFst = flip delete与delete从Data.List.