我試着寫功能,我不知道爲什麼我不能讓它以這種方式FOLDR比較累加器空單
ssm' = foldr (\x acc -> if acc == [] then [x]++acc else if (x > (maximum acc)) then [x]++acc else acc) []
給我一個線索請。
我試着寫功能,我不知道爲什麼我不能讓它以這種方式FOLDR比較累加器空單
ssm' = foldr (\x acc -> if acc == [] then [x]++acc else if (x > (maximum acc)) then [x]++acc else acc) []
給我一個線索請。
您已經遇到monomorphism restriction。您可以通過添加類型簽名來修復它。
ssm' :: Ord a => [a] -> [a]
ssm' = ...
順便說一句,你的代碼看起來太複雜了。你過度使用if
,[x]++acc
只是x:acc
。掃描acc
在每一步使用maximum
是浪費,因爲它的最大元素必須是它的頭。產品總數我會寫:
ssm' :: Ord a => [a] -> [a]
ssm' = foldr go [] where
go x [] = [x]
go x [email protected](m:_)
| x > m = x:ms
| otherwise = ms
如果你真的像單行,儘量
import Data.List
ssm' xs = reverse $ map head $ groupBy (>) (reverse xs)
我的直線更容易我發佈它在coment下第一篇文章沒有反過來謝謝你的解決方案 – whd
它並不能編譯我的ghci的......我試圖重寫功能ssm xs = foldr((:)。head)[](groupBy(> =)xs)不使用groupby – whd
如果您正在使用'ghci',您是否記得使用'let'語法? 'let ssm'= ....' –
我正在從文件加載 – whd