Iterating on a LIST

There are three Eiffel mechanisms to iterate on every element of a LIST.

the across loop

The across can be used on every ITERABLE object (including LIST objects).

print_elements (a_list: LIST[INTEGER]) -- Print every elements on `a_list` do across a_list as ic loop print (ic.item.out + "%N") end end

Note that the temporary variable (ic in the example) represents an iterator of the ITERABLE object, and not directly an element like in many other languages (like the for structure in Python for example).

the from until loop syntax

This syntax offer more possibilities than the across loop, but is riskier.

print_elements (a_list:LIST[INTEGER]) -- Print every elements on `a_list` do from a_list.start until a_list.exhausted loop print (a_list.item.out + "%N") a_list.forth end end

Using Eiffel agents and {LIST}.do_all, ....

It is possible to use agents in conjunction with the LIST features do_all, do_if, there_exists, and for_all which are inherited from the class LINEAR. list_traversal_agents -- Example of traversing a list with do_all local a_list: LINKED_LIST [STRING] do -- Insert some elements in a_list create a_list.make a_list.extend ("The Moon Is Full") a_list.extend ("Master charge") a_list.extend ("Black cat bone") a_list.do_all (agent {STRING}.append (" - Albert Collins")) a_list.do_all (agent print_element) end print_element (a_element: STRING) -- Print `a_element` to standard output do io.put_string (a_element) io.put_new_line end

cached: 04/22/2019 1:18:57.000 PM