Exercise 8: Nested Repetition

In this exercise, you will need to use nested repetition. That's where you write a repetition inside another one, for example, ( $( $( $val:expr ),+ );+ ) would let you specify at least one value, but separate them with either ; and ,.

The only oddity about nested repetition is that you must ensure that you use metavariables in a context where it's clear you're only referring to one of them. In other words, the $val metavariable in the last paragraph must be used within a nested repetition.

Exercise 8: Nested Repetition

In this task, you will be building a macro to load a data structure with an adjacency list from a graph. As a refresher, graphs are data structures that describe how different nodes are connected.

Each will be a literal, and you will be specifying, for each node, which nodes it connects to. For example,

graph!{ 1 -> (2, 3, 4, 5); 2 -> (1, 3); 3 -> (2); 4 -> (); 5 -> (1, 2, 3); }

should get translated into a Vec containing the pairs (1, 2), (1, 3), ... (2, 1), ... (5, 3).

You may not edit the main function, but it should eventually look like the following:

#[allow(clippy::vec_init_then_push)] fn main() { let my_graph = { let mut vec = Vec::new(); vec.push((1, 2)); vec.push((1, 3)); vec.push((1, 4)); vec.push((1, 5)); vec.push((2, 1)); vec.push((2, 3)); vec.push((3, 2)); vec.push((5, 1)); vec.push((5, 2)); vec.push((5, 3)); vec }; print_vec(&my_graph); }