Tree datastructures: Difference between revisions
Content added Content deleted
m (→Functional) |
m (→Functional) |
||
Line 471: | Line 471: | ||
# forestFromNestLevels :: [(Int, |
# forestFromNestLevels :: [(Int, a)] -> [Tree a] |
||
def forestFromNestLevels(tuples): |
def forestFromNestLevels(tuples): |
||
'''A list of trees derived from a list of |
'''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, |
(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( |
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] |
||