2015-02-23 99 views
2

我正在嘗試解決此問題。這個函數有兩個參數。第一個是返回布爾值的函數,第二個是數字列表。該函數應該刪除第二個參數中的第一個值,該參數在與第一個參數一起運行時返回true。 還有第二個函數,它執行相同的操作,除了刪除滿足它的最後一個值,而不是第一個。 我相當肯定我有邏輯下來,因爲我用另一種語言測試它,它的工作,我唯一的問題是將其翻譯成Haskell語法。下面是我有:刪除符合條件的列表中的第一個值

removeFirst :: (t -> Bool) -> [t] -> [t] 
removeFirst p xs = [] 
removeFirst p xs 
     | p y = ys 
     | otherwise = y:removeFirst p ys 
     where 
      y:ys = xs 

removeLast :: (t -> Bool) -> [t] -> [t] 
removeLast p xs = [] 
removeLast p xs = reverse (removeFirst p (reverse xs)) 

我跑:

removeFirst even [1..10] 

而是獲得[1,3,4,5,6,7,8,9,10]正如所料,我得到[]。 我在做什麼錯?

+1

如果你用'-Wall'編譯你的代碼,指出錯誤,GHC應該對重疊模式提出警告。 – chi 2015-02-23 19:22:55

+0

我做了,但我不確定它的意思,但它仍然編譯。 – Himself12794 2015-02-23 19:36:15

回答

4
removeFirst p xs = [] 

這總是返回空列表,並將其所有參數相匹配。我認爲你是這個意思。

removeFirst _ [] = [] 
+0

謝謝!這確實有效。現在我必須做同樣的事情,去掉第二個價值。在尋求幫助之前,我會試着去做點什麼。 – Himself12794 2015-02-23 19:18:18

2

你的第一個方程式,

removeFirst p xs = [] 

說:「無論我的論點,只是返回[]」,代碼的其餘部分被忽略。

你大概的意思

removeFirst p [] = [] 

說:「當列表已經爲空,則返回空列表。」