関数を書き込もうとしていますが、なぜそのようにできないのかわかりません
ssm' = foldr (\x acc -> if acc == [] then [x]++acc else if (x > (maximum acc)) then [x]++acc else acc) []
手がかりをください。
ところで、あなたのコードはあまりにも複雑に見えます。使いすぎif
て[x]++acc
ただの中古品x:acc
です。その最大の要素は頭でなければならないacc
ので、を使用してすべてのステップでスキャンするのは無駄です。全体として、次のように書きます。maximum
ssm' :: Ord a => [a] -> [a]
ssm' = foldr go [] where
go x [] = [x]
go x ms@(m:_)
| x > m = x:ms
| otherwise = ms
ワンライナーが本当に好きなら、試してみてください
import Data.List
ssm' xs = reverse $ map head $ groupBy (>) (reverse xs)
単相制限に遭遇しました。型署名を追加することで修正できます。
ssm' :: Ord a => [a] -> [a]
ssm' = ...