RosettaCodeData/Task/Same-Fringe/Haskell/same-fringe.hs

30 lines
902 B
Haskell
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
data Tree a
= Leaf a
| Node (Tree a)
(Tree a)
deriving (Show, Eq)
2013-04-10 23:57:08 -07:00
fringe :: Tree a -> [a]
fringe (Leaf x) = [x]
fringe (Node n1 n2) = fringe n1 ++ fringe n2
2017-09-23 10:01:46 +02:00
sameFringe
:: (Eq a)
=> Tree a -> Tree a -> Bool
2013-04-10 23:57:08 -07:00
sameFringe t1 t2 = fringe t1 == fringe t2
2017-09-23 10:01:46 +02:00
main :: IO ()
2013-04-10 23:57:08 -07:00
main = do
2017-09-23 10:01:46 +02:00
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)))
mapM_ print $ sameFringe a <$> [a, b, c, x, y, z]