這是用於Haskell中的任務。 我們一直負責使用foldr函數定義各種函數。Haskell - 具有foldr功能的組列表元素
我們都被賦予了類型:
group :: Eq a => [a] -> [[a]]
和被要求來定義它使得:
group [1,2,2,3,4,4,4,5] = [[1], [2,2], [3], [4,4,4], [5]]
group [1,2,2,3,4,4,4,5,1,1,1] = [[1], [2,2], [3], [4,4,4], [5], [1,1,1]]
這是我到目前爲止有:
group = foldr (\x xs -> if x == head (head xs) then (x : head xs) : xs else (x : []) : (head xs) : xs)
但當我嘗試加載到ghci解釋器時,我收到以下錯誤消息:
Couldn't match type `[a0] -> [a]' with `[[a]]'
Expected type: [a] -> [[a]]
Actual type: [a] -> [a0] -> [a]
In the return type of a call of `foldr'
Probable cause: `foldr' is applied to too few arguments
In the expression:
foldr
(\ x xs
-> if x == head (head xs) then
(x : head xs) : xs
else
(x : []) : (head xs) : xs)
In an equation for `group':
group
= foldr
(\ x xs
-> if x == head (head xs) then
(x : head xs) : xs
else
(x : []) : (head xs) : xs)
如果任何人都可以解釋爲什麼我的代碼不能像我期望的那樣工作,那將不勝感激。 謝謝。
它說你就在那裏:你需要一個額外的參數...嘗試任何你想得到的,如果你做'組[]';)(但要小心會有其他問題...) – Carsten