Hi everyone I'm trying to write a piece of Haskell code, but for some reason I can't make it working. I'm asking for your help in finding a bug in this code:
> import Data.Tree > import Data.List > expandTree :: Int -> [(Int,Int)] -> ((Tree Int),[(Int,Int)]) > expandTree rootLabel [] = ((Node rootLabel []),[]) -- probably obsolete line > expandTree rootLabel nodePairs = ((Node rootLabel forest),unused) > where > (marked,unmarked) = partition (\ (x,y) -> (x==rootLabel) || (y==rootLabel)) nodePairs > (forest,unused) = foldl > (\ (forestAcc, unusedPairs) node -> let (a,b) = expandTree node unused in ((a:forestAcc),b) ) > ([],unmarked) > (map (\(o,p)-> if o == rootLabel then p else o ) marked) It is supposed to create tree with root labeled with rootLabel, while nodePairs is a description of a tree. If a list is not exhausted, the remaining should be returned. It should work so that: expandTree 1 [(1,2)] == ((Node 1 [(Node 2 [])]),[]) expandTree 1 [(2,3)] == ((Node 1 []),[(2,3)]) expandTree 1 [(1,2),(3,4)] == ((Node 1 [(Node 2 [])]),[(3,4)]) However, the code loops. Any clues? Thanks in advance. Regards Christopher Skrzętnicki
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe