[Haskell-cafe] List-to-outline
Colin DeVilbiss
cdevilbiss at gmail.com
Tue Feb 14 16:35:59 EST 2006
On 2/14/06, Steve Schafer <steve at fenestra.com> wrote:
> isChild :: Int -> Node -> Bool
> isChild i (Nd j _) = (j > i)
> isChild _ _ = False
>
> prepend :: Int -> [Node] -> [Node]
> prepend i [] = [Nd i []]
> prepend i ns = (Nd i f):s
> where (f,s) = span (isChild i) ns
>
> unflatten :: [Int] -> [Node]
> unflatten ns = foldr prepend [] ns
The following seemed a little more natural to me:
unflatten [] = []
unflatten (x:xs) = (Node x $ unflatten xh) : unflatten xt
where (xh, xt) = span (>x) xs
That is, a node containing the first item and the hierarchy of all of
its children, followed by the hierarchies of its siblings.
Is [0,2,1,2] invalid input? The behavior of both versions puts the
first 2 and the 1 as children of the root, but the second 2 is a child
of the 1.
Colin DeVilbiss
More information about the Haskell-Cafe
mailing list