我需要帮助理解以下 Haskell 函数,
split l = rr++[ll]
where
split = foldl
( \ (c,a) e ->
case c of
[] -> ([e],a)
_ -> if e*(head c) < 0
then ([e],a++[c])
else (c++[e],a))
([],[])
(ll,rr) = split l
> split [1,2,3,-1,-2,7,4,-3,-5,-6,2,3]
[[1,2,3],[-1,-2],[7,4],[-3,-5,-6],[2,3]]
如上所示,它将具有相同符号的连续数字拆分为单独的列表。在 Scheme 中,tracer 函数对逐步评估表达式非常有帮助,但不幸的是,GHCi 没有这样的功能。请帮助我逐步完成代码。谢谢!
注意:我理解函数的 foldl 部分。真正让我困惑的是模式匹配部分(split l = rr++[ll]
和)!(ll,rr) = split l