
10 Oct
2012
10 Oct
'12
9:12 p.m.
Hi Daryoush, You could add another case to label, importing Debug.Trace: data Tree = Leaf | Node Tree Int Tree deriving Show *label t | trace (show $ "label " ++ show t) False = undefined*
label (Node ln _ rn) ((h:r):rest) = (Node lr h rr, r:r2) where
(lr, r1) = label ln rest
(rr, r2) = label rn r1
label _ _ = (Leaf, [])
lt t = let (r, unused) = label t ([1..]:unused) in r
This will output one line per each call to label. Except for one thing: your show function will never actually terminate, if the tree is cyclic. You can fix this by defining your own show function. HTH, Ozgur