2017-04-09 64 views
1

我想在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}。我正在使用的书只有minmax定义。

+0

用什么语言? –

+1

为什么空输入或空结果出错?这非常令人惊讶!另外,如果列表中有多个'm'副本,你希望发生什么? – dfeuer

+0

@dfeuer对于空输入有一个错误在某些情况下可能是有意义的。也就是说,你想确定你的函数真的删除了一个元素 - 如果没有,那么其他地方就有一个bug,所以我们现在可能想要报告它。另一方面,空输出的错误很奇怪,我找不到任何理由选择。 – chi

回答

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) 
3

错误在最后一种情况。您需要确保列表前面的x不等于m,它是您返回列表的一部分。

+0

我明白这就是问题所在。这是什么语法? –