Daniel Fischer daniel.is.fischer at web.de
Sun Nov 8 19:12:40 EST 2009

```Am Sonntag 08 November 2009 23:24:59 schrieb spot135:
> Hi,
>
> Ok what im trying to do is replace an element in an n-ary and display the
> completed tree.
>
> So this is what ive got so far.
>
> data Tree a = Empty |Leaf a|Branch a [Tree a]
> 				deriving (Show)
>

replace x y tree

should give a tree with the same structure, values equal to x should be replaced by y, all
other values left as they are?

>
> replace :: Eq a=>a->a->Tree a -> (Tree a)
>
> replace x y Empty = Element x

That should surely be

replace _ _ Empty = Empty ?

>
> replace x y (Leaf z)
>
> 	| x==z = (Leaf y)
>
> --	| otherwise =

| otherwise = Leaf z

>
> replace x y (Branch z lis)
>
> 	| x==z = (Branch y lis)
> 	|otherwise = replaceA x y clis

You'd want to recur, I believe, use

map (replace x y)

>
> replaceA :: Eq a=> a->a->[Tree a]->(Tree a)
> replaceA _ _ [] = Empty -- run out
> replaceA x y (h:r)
>
> 	|Q suc = suc
> 	|otherwise = replaceA x y r
>
> 	where suc=replace x y h
>
> Q :: a -> Bool
> Q a = True
> Q a = False
>
> Theres two main problems i am having. One is I'm not sure what should be
> the "otherwise" in the leaf function. Another problem is it doesn't show
> the whole tree just the part after the replacement.
>
> If you think this is complete bull I'll quite happily start over if
> somebody could give me some insight
> into what is the best way of tackling this problem is.
>