【发布时间】:2019-01-29 02:24:47
【问题描述】:
我是 Haskell 的新手,目前正在为考试而学习它。我一直从learnyouahaskell学习它。我不明白 group 函数中的以下 let 表达式。
splitWhen :: (a -> Bool) -> [a] -> ([a],[a])
splitWhen p xs = (takeWhile (not . p) xs, dropWhile (not . p) xs)
group :: (Eq a) => [a] -> [[a]]
group [] = []
group (x:xs) = let (group1, rest) = splitWhen (/=x) xs
in (x:group1) : group rest
我知道 splitWhen 做了什么:splitWhen even [1,2,3] => ([1],[2,3])
我知道函数组产生以下内容:
group [1,1,2,1,3,3,3] => [[1,1],[2],[1],[3,3,3]]
我不明白它是如何工作的。有人可以向我解释一下吗? 谢谢。
【问题讨论】:
-
您具体询问的是哪一部分?
(/=x)? -
整个 let (group1, rest) = splitWhen (/=x) xs in (x:group1) : group rest
-
你需要查找解构来找出
let之后的部分,以及in之后的部分的递归和 cons 构造函数。不过,解释这些行的全部内容过于宽泛。
标签: haskell