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);
}