我的錯誤資訊如下: 'Could't match expected type '[a0]' with actual type '([char], [Int])' In the first argument of 'zip'
我正在嘗試進行運行長度編碼,例如
編碼 "aaaaabbbbcc"
[('a',5),('b',4),('c',2)]
我的代碼是這樣的:
encode [] = []
encode ls = zip((map head list), (map length list))
where list = runs ls
'runs' 函式回傳 [String],例如
運行 "aaaaabbbbcc"
["aaaaa","bbbb","cc"]
我不知道如何解決它,任何幫助或解釋將不勝感激!
uj5u.com熱心網友回復:
您正在嘗試使用 C 風格的語法來呼叫zip,這被解釋為zip獲取單個元組作為其引數,而不是您想要的兩個串列。
encode ls = zip (map head list) (map length list)
where list = runs ls
uj5u.com熱心網友回復:
您可以在單個映射中執行此操作,其中對于 的每個專案runs ls,您將其映射到 2 元組:
encode = map (\x -> (head x, length x)) . runs
或者我們可以將 lambda 運算式重寫為:
encode = map ((,) <$> head <*> length) . runs
或者,正如@leftroundabout 所說,使用(&&&) :: Arrow a => a b c -> a b c' -> a b (c, c'):
import Control.Arrow((&&&))
encode = map (head &&& length) . runs
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437093.html
