Display an outline as a nested table: Difference between revisions

m
→‎Python: Functional: On slight simplification by generalisation
(→‎{{header|JavaScript}}: Added spacing between successive tables, if any, for forest case)
m (→‎Python: Functional: On slight simplification by generalisation)
Line 2,467:
paintedTree(colorSwatch),
widthMeasuredTree,
fullDepthTreeap(paddedTree(""))(treeDepth)
)
 
Line 2,542:
 
# -------------- TREE PADDED TO EVEN DEPTH ---------------
 
# fullDepthTree :: Node String -> Node String
def fullDepthTree(tree):
'''A tree padded down even evenly
(with empty string nodes)
to the depth of its deepest subtree.
'''
return paddedTree("")(
treeDepth(tree), tree
)
 
 
# paddedTree :: a -> (Int, Node a) -> Node a
Line 2,560 ⟶ 2,549:
where needed.
'''
def go(n, tree):
prev =def pad(n - 1):
return Node(tree.get('root'))([ prev = n - 1
goreturn Node(prev, xtree.get('root')) for x in ([
tree.getgo('nest'x)(prev) orfor x in [Node(padValue)([])]
tree.get('nest') or [Node(padValue)([])]
]) if prev else tree )
]) if prev else tree
return pad
return go
 
Line 2,707 ⟶ 2,698:
 
# ----------------------- GENERIC ------------------------
 
# ap :: (a -> b -> c) -> (a -> b) -> a -> c
def ap(f):
'''Applicative instance for functions.
'''
def go(g):
return lambda x: f(x)(g(x))
return paddedTree("")(go
 
# compose :: ((a -> a), ...) -> (a -> a)
 
 
def compose(*fs):
'''Composition, from right to left,
9,659

edits