Same fringe: Difference between revisions
Content added Content deleted
m (improved output) |
(→{{header|Haskell}}: Applied hindent, + slight visual pruning of the test) |
||
Line 1,029: | Line 1,029: | ||
To get the fringe, we can simply use the solution for [[Flatten a list#Haskell|Flatten a list]], slightly modified for a binary tree instead of a general tree: |
To get the fringe, we can simply use the solution for [[Flatten a list#Haskell|Flatten a list]], slightly modified for a binary tree instead of a general tree: |
||
<lang haskell>data Tree a |
<lang haskell>data Tree a |
||
= Leaf a |
|||
⚫ | |||
| Node (Tree a) |
|||
(Tree a) |
|||
⚫ | |||
fringe :: Tree a -> [a] |
fringe :: Tree a -> [a] |
||
Line 1,036: | Line 1,039: | ||
fringe (Node n1 n2) = fringe n1 ++ fringe n2 |
fringe (Node n1 n2) = fringe n1 ++ fringe n2 |
||
sameFringe |
sameFringe |
||
:: (Eq a) |
|||
=> Tree a -> Tree a -> Bool |
|||
sameFringe t1 t2 = fringe t1 == fringe t2 |
sameFringe t1 t2 = fringe t1 == fringe t2 |
||
main :: IO () |
|||
main = do |
main = do |
||
let a = Node (Leaf 1) (Node (Leaf 2) (Node (Leaf 3) (Node (Leaf 4) (Leaf 5)))) |
|||
b = Node (Leaf 1) (Node (Node (Leaf 2) (Leaf 3)) (Node (Leaf 4) (Leaf 5))) |
|||
c = Node (Node (Node (Node (Leaf 1) (Leaf 2)) (Leaf 3)) (Leaf 4)) (Leaf 5) |
|||
x = |
|||
Node |
|||
(Leaf 1) |
|||
(Node |
|||
(Leaf 2) |
|||
(Node (Leaf 3) (Node (Leaf 4) (Node (Leaf 5) (Leaf 6))))) |
|||
y = Node (Leaf 0) (Node (Node (Leaf 2) (Leaf 3)) (Node (Leaf 4) (Leaf 5))) |
|||
z = Node (Leaf 1) (Node (Leaf 2) (Node (Node (Leaf 4) (Leaf 3)) (Leaf 5))) |
|||
print $ sameFringe a x |
|||
mapM_ print $ sameFringe a <$> [a, b, c, x, y, z]</lang> |
|||
⚫ | |||
print $ sameFringe a z</lang> |
|||
⚫ | |||
<pre>True |
<pre>True |
||
True |
True |