我需要幫助理解下面的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