RosettaCodeData/Task/Parametric-polymorphism/Phix/parametric-polymorphism-2.phix

43 lines
999 B
Plaintext

enum data, left, right
function tmap(sequence tree, integer rid)
tree[data] = call_func(rid,{tree[data]})
if tree[left]!=null then tree[left] = tmap(tree[left],rid) end if
if tree[right]!=null then tree[right] = tmap(tree[right],rid) end if
return tree
end function
function newnode(object v)
return {v,null,null}
end function
function add10(atom x) return x+10 end function
procedure main()
object root = newnode(1.00)
-- Add some nodes.
root[left] = newnode(1.10)
root[left][left] = newnode(1.11)
root[left][right] = newnode(1.12)
root[right] = newnode(1.20)
root[right][left] = newnode(1.21)
root[right][right] = newnode(1.22)
-- Now the tree has seven nodes.
-- Show the whole tree.
ppOpt({pp_Nest,2})
pp(root)
-- Modify the whole tree.
root = tmap(root,routine_id("add10"))
-- Create a whole new tree.
object root2 = tmap(root,rid)
-- Show the whole tree again.
pp(root)
end procedure
main()