我需要帮助理解下面的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中,跟踪器功能对逐步评估表达式非常有帮助,但不幸的是,GHCi没有这样的功能。请帮助我逐步完成代码。谢谢!
注意:我理解函数的foldl部分。这是模式匹配部分(split l = rr++[ll]
和(ll,rr) = split l
)真的让我困惑!
哪种模式匹配部分 - 您是指案例表达式?那怎么会让你困惑? –
我的意思是,算法本身非常混乱,而且,彻头彻尾的错误:) - 在一个以0开头的列表上试试它。但是你应该清楚它是否是那种语法或者你被困在什么地方。 –
GHCi _can_值得追查。我不记得目前如何,虽然... – javawizard