了解 Haskell 的基本原理(Monads 等),但是已经 2 年没用了,为了干净利落地做了这个小练习,我苦苦挣扎了两个小时:
我想将一行 3*n 整数(如"1 1 1 2 2 2 3 3 3"
)转换为Int
(如[(1,1,1),(2,2,2),(3,3,3)]
.
这应该以直截了当、错误捕获的方式完成。
到目前为止,我能想到的最佳解决方案包含以下内容:
groupsOf3 :: [a] -> Maybe [(a,a,a)]
groupsOf3 list =
let fun l = case l of
[] -> []
(x:y:z:rest) -> (Just (x,y,z)) : (fun rest)
_ -> [Nothing]
in sequence $ fun list
这对我来说似乎并不优雅。我将如何更直接地编写这个函数(具有相同的界面)?