我有一個看似簡單的Haskell問題,並且我的知識有限,我不確定爲了解決它而搜索的條件。haskell初始累加器'空'值
我試圖從99個Haskell的問題(從清單中移除連續的重複)解決問題的編號爲8,這是我想出來的:
compress :: (Eq a) => [a] -> [a]
compress list = compress' list ???
where
compress' [] _ = []
compress' (x:xs) last
| x == last = compress xs last
| otherwise = x : compress xs x
「???」只是一個佔位符,這是我不確定該怎麼做的地方。我想這個代碼片段的工作原理應該足夠清楚,'last'是一個累加器,用於檢查元素是否與以前的元素重複。 現在,在這種情況下,我可以給出'最後'的初始值? (我想大多數OO語言中類似'null'的東西)。
編輯:Tikhon的答案有效,但是我只是意識到我在我原來的帖子中犯了一個錯誤,compress'應該遞歸調用它自己而不是壓縮。因此,我的問題的'微不足道'的解決方案是:
compress :: (Eq a) => [a] -> [a]
compress list = compress' list Nothing
where
compress' [] _ = []
compress' (x:xs) Nothing = x : compress' xs (Just x)
compress' (x:xs) (Just last)
| x == last = compress' xs (Just last)
| otherwise = x : compress' xs (Just x)
'???只是一個佔位符。如果你用'_'改變'???'並重新加載,GHCi會嘗試猜測在「打孔」中應該是什麼類型。 – danidiaz
'compress [] = []; compress(x:xs)= x:compress'xs x' – melpomene