Tree datastructures: Difference between revisions

Content added Content deleted
Line 471: Line 471:




# forestFromNestLevels :: [(Int, String)] -> [Tree String]
# forestFromNestLevels :: [(Int, a)] -> [Tree a]
def forestFromNestLevels(tuples):
def forestFromNestLevels(tuples):
'''A list of trees derived from a list of lines paired
'''A list of trees derived from a list of values paired
with integers giving their levels of indentation.
with integers giving their levels of indentation.
'''
'''
def go(xs):
def go(xs):
if xs:
if xs:
(intIndent, txt) = xs[0]
(intIndent, v) = xs[0]
(firstTreeLines, rest) = span(
(firstTreeLines, rest) = span(
lambda x: intIndent < x[0]
lambda x: intIndent < x[0]
)(xs[1:])
)(xs[1:])
return [Node(txt)(go(firstTreeLines))] + go(rest)
return [Node(v)(go(firstTreeLines))] + go(rest)
else:
else:
return []
return []
Line 516: Line 516:
'Parse tree from outline text:\n',
'Parse tree from outline text:\n',
forestJSON(forestA),
forestJSON(forestA),

'\nNesting level list from tree:\n',
'\nNesting level list from tree:\n',
json.dumps(nestLevels, indent=2),
json.dumps(nestLevels, indent=2),

'\nTree rebuilt from nesting level list:\n',
'\nTree rebuilt from nesting level list:\n',
forestJSON(forestB),
forestJSON(forestB),
Line 564: Line 566:
return [node['root'], [go(x) for x in node['nest']]]
return [node['root'], [go(x) for x in node['nest']]]
return [go(x) for x in xs]
return [go(x) for x in xs]