我正在尝试在Haskell中编写一个函数,它将获取一个整数列表,如果m
是该列表的一个元素,它将打印没有m
的列表,否则它将只打印列表。我写了
rmvFirst :: Int -> [Int] -> [Int]
rmvFirst m [] = error "Empty"
rmvFirst m [x] | x == m = error "Empty Set"
rmvFirst m (x:xs) | x == m = (xs)
rmvFirst m (x:xs) | otherwise = rmvFirst m (xs)
如果我输入3 [1..5],则输出[4..5]。但是,我想{1,2,4,5}。我使用的图书只定义了min
和max
。
答案 0 :(得分:3)
错误发生在最后一种情况。您需要确保列表前面的x
(不等于m
)是您返回的列表的一部分。
答案 1 :(得分:2)
正如@hugomg评论的那样,你的最后一个案例是错误的。
rmvFirst :: Int -> [Int] -> [Int]
rmvFirst m [] = error "Empty"
rmvFirst m [x] | x == m = error "Empty Set"
rmvFirst m (x:xs) | x == m = (xs)
rmvFirst m (x:xs) | otherwise = x : rmvFirst m (xs)