Same fringe: Difference between revisions

→‎{{header|Haskell}}: Applied hindent, + slight visual pruning of the test
m (improved output)
(→‎{{header|Haskell}}: Applied hindent, + slight visual pruning of the test)
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:
<lang haskell>data Tree a = Leaf a | Node (Tree a) (Tree a)
= Leaf a
deriving (Show, Eq)
| Node (Tree a)
(Tree a)
deriving (Show, Eq)
 
fringe :: Tree a -> [a]
Line 1,036 ⟶ 1,039:
fringe (Node n1 n2) = fringe n1 ++ fringe n2
 
sameFringe :: (Eq a) => Tree a -> Tree a -> Bool
:: (Eq a)
=> Tree a -> Tree a -> Bool
sameFringe t1 t2 = fringe t1 == fringe t2
 
main :: IO ()
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)
print $ sameFringex a a=
print $ sameFringe a bNode
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))))2)
y = Node (Leaf 0) (Node (Node (Leaf 23) (Node (Leaf 3)4) (Node (Leaf 45) (Leaf 56)))))
zy = Node (Leaf 10) (Node (Node (Leaf 2) (NodeLeaf 3)) (Node (Leaf 4) (Leaf 3)) (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>
{{outOut}}
print $ sameFringe a z</lang>
{{out}}
<pre>True
True
9,655

edits