2017-04-09 66 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

我明白這就是問題所在。這是什麼語法? –