這是我第二天學習哈斯克爾和我被一個問題困住了。 我試圖解決99 Haskell questions 問題第八題是寫一個名爲「壓縮」功能,它的工作原理是這樣的:哈斯克爾學習者關於過濾和摺疊的小問題
>compress "aaaabbbbccccddddd"
"abcd"
>compress [1,1,1,1,2,3,4,4,4,4]
[1,2,3,4]
和這裏就是我寫道:
compress :: (Eq a) => [a] -> [a]
compress [] = []
compress x = filter ((head x) `notElem` (compress $ tail x)) x
編譯器說:
無法比擬預期型
a -> Bool' with actual type
布爾」
在compress
,我試圖從頭到尾遞歸地拾取新的元素。 (如回溯也許??)
我的算法錯了嗎? 是否有另外一種更可讀的方法來實現算法? (如:在哪裏放圓括號?或$
)
有人可以幫我一下嗎? 非常感謝。
壓縮 '(X:XS)= X:壓縮'(dropWhile(== X)XS)
由於盧博米爾的幫助下,我通過糾正我的代碼
它工作!
並感謝大家,我感到寵壞了! 你們好客!
我會繼續學習Haskell!
在發佈之前總是在重新編譯之前進行修改。你有一個錯字 –
在問這裏之前,找到一個有良好前景的初學者是令人耳目一新的。繼續努力,你會學到很多東西。 –
這是我在Stackoverflow的第一篇文章。每個人都非常慷慨地幫助我,真是太棒了!非常感謝 –