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 = Leaf a | Node (Tree a) (Tree a)
<lang haskell>data Tree a
= Leaf a
deriving (Show, Eq)
| Node (Tree a)
(Tree a)
deriving (Show, Eq)


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 :: (Eq a) => Tree a -> Tree a -> Bool
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))))
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)))
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)
c = Node (Node (Node (Node (Leaf 1) (Leaf 2)) (Leaf 3)) (Leaf 4)) (Leaf 5)
print $ sameFringe a a
x =
print $ sameFringe a b
Node
print $ sameFringe a c
(Leaf 1)
(Node

let x = Node (Leaf 1) (Node (Leaf 2) (Node (Leaf 3) (Node (Leaf 4) (Node (Leaf 5) (Leaf 6)))))
(Leaf 2)
y = Node (Leaf 0) (Node (Node (Leaf 2) (Leaf 3)) (Node (Leaf 4) (Leaf 5)))
(Node (Leaf 3) (Node (Leaf 4) (Node (Leaf 5) (Leaf 6)))))
z = Node (Leaf 1) (Node (Leaf 2) (Node (Node (Leaf 4) (Leaf 3)) (Leaf 5)))
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
print $ sameFringe a y
mapM_ print $ sameFringe a <$> [a, b, c, x, y, z]</lang>
{{Out}}
print $ sameFringe a z</lang>
{{out}}
<pre>True
<pre>True
True
True