次の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]]
上記のように、同じ符号の連続する番号を別々のリストに分割します。スキームでは、トレーサー関数は式を段階的に評価するのに非常に役立ちましたが、残念ながら、GHCiにはそのような機能がありません。コードをステップスルーするのを手伝ってください。ありがとう!
注:関数のfoldl部分を理解しています。本当に混乱するのはパターンマッチング部分(split l = rr++[ll]
と)です!(ll,rr) = split l