in reply to Re^2: map & arrays & recursion
in thread map & arrays & recursion

thanks to both kennethk and ikegami.

the first code from kennethk does indeed work. so i guess i don't understand what routines that return an array really do......

given this snippet :

foreach my $node ( @{ $self->{_children} } ) { push @list, $node->traverse(); } return @list;

is the following a correct description ?

foreach node in the children ARRAY recursively call this routine if the node has children recursively call this routine if the node has NO children the returned list is just that node each time the routine returns it's array is pushed onto the array of the callee when the routine reaches the end of the top children ARRAY the visited nodes haved all been pushed into the top list

for some reason, i had the impression that if you push an ARRAY into an ARRAY, the ARRAYS are preserved (not merged).

thanks for your patience and support

Replies are listed 'Best First'.
Re^4: map & arrays & recursion
by ikegami (Patriarch) on Oct 02, 2010 at 04:21 UTC

    is the following a correct description ?

    • You described an algorithm with three conditionals and a loop. The algorithm only has a loop.
    • You described an algorithm with two recursive calls. The algorithm only has one.
    • You described an algorithm with an infinite loop.
    • You described an algorithm that adds to the callee's array after the callee has returned. That's impossible.

    The algorithm is:

    • Given the root of a subtree $self,
      • $self is a node of subtree $self.
      • For every child of $self,
        • The nodes in the subtree rooted at that child is a node of subtree $self.
      • Return the nodes of subtree $self.

    i had the impression that if you push an ARRAY into an ARRAY, the ARRAYS are preserved (not merged).

    It sounds like you're expecting an array to be able to contain another array. It can't, at least not directly. Array elements are scalars.