我正在嘗試解決此問題。這個函數有兩個參數。第一個是返回布爾值的函數,第二個是數字列表。該函數應該刪除第二個參數中的第一個值,該參數在與第一個參數一起運行時返回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]正如所料,我得到[]。 我在做什麼錯?
如果你用'-Wall'編譯你的代碼,指出錯誤,GHC應該對重疊模式提出警告。 – chi 2015-02-23 19:22:55
我做了,但我不確定它的意思,但它仍然編譯。 – Himself12794 2015-02-23 19:36:15