Parse a tree


#1

Hi.

How can I parse a tree (arrays within arrays), for example a tree of
strings, to print all strings ?

Thanks.


#2

Haris wrote:

Hi.

How can I parse a tree (arrays within arrays), for example a tree of
strings, to print all strings ?

Thanks.

tree walking hints at a recursive routine…

def tree_walk(array)
array.each do |item|
if item.class == Array
tree_walk(item)
else
puts item
end
end
end

or for the one-liners among us
def tree_walk(array)
array.each { |item| (item.class == Array)? tree_walk(item) : puts
item }
end

However, I don’t reccomend testing on the item.class. I can’t explain
why very well, but it seems wrong to me. Maybe someone else can…?

=======================================================================
This email, including any attachments, is only for the intended
addressee. It is subject to copyright, is confidential and may be
the subject of legal or other privilege, none of which is waived or
lost by reason of this transmission.
If the receiver is not the intended addressee, please accept our
apologies, notify us by return, delete all copies and perform no
other act on the email.
Unfortunately, we cannot warrant that the email has not been
altered or corrupted during transmission.


#3

Michael M. wrote:

However, I don’t reccomend testing on the item.class. I can’t explain
why very well, but it seems wrong to me. Maybe someone else can…?

I think it’s fine. You need some way to distinguish between a leaf node
and an inner node, and how you do that depends on how your data
structure is built.

Here, the assumption is that inner nodes are Arrays and leaf nodes are
anything else.


#4

From: Michael M. [mailto:removed_email_address@domain.invalid]
#…

def tree_walk(array)

array.each { |item| (item.class == Array)?

                       ^^^^^^^^^^^^^^^^^^^^
                       item.is_a? Array

tree_walk(item) : puts item }

end

note that the above tree_walk is equivalent to,

puts array


#5

On 04.03.2009 03:51, Haris Bogdanoviæ wrote:

How can I parse a tree (arrays within arrays), for example a tree of
strings, to print all strings ?

Do you want to parse or print? This is totally unclear to me. For
displaying nested structures for debugging purposes, pp will do

require ‘pp’

a = […] # nested
pp a

If you want to parse: you did not provide how the input looks like so
nobody could help you with that.

Kind regards

robert