The tree of function calls made by a naive Fibonacci implementation.
import Diagrams.Backend.SVG.CmdLine{-# LANGUAGE NoMonomorphismRestriction #-}
import Diagrams.PreludeWe make use of a tree layout module from the diagrams-contrib package:
import Diagrams.TwoD.Layout.TreeGenerate the tree of naive Fibonacci calls.
fibCalls :: Integer -> BTree Integer
fibCalls 0 = leaf 0
fibCalls 1 = leaf 1
fibCalls n = BNode n (fibCalls (n-1)) (fibCalls (n-2))Lay out the tree and render it by providing a function to render nodes and a function to render edges.
Just t = uniqueXLayout 2 2 (fibCalls 5)
example = pad 1.1 . centerXY
$ renderTree
(\n -> (text ("fib " ++ show n)
<> roundedRect 3 1.3 0.3 # fc gold)
)
(~~) t
`atop` square 1 # scaleY 12 # translateY (-5)
# scaleX 34
# lw none # fc whitesmokemain = mainWith (example :: Diagram B)