# Rust by Example

## 15.3 Repeat

Macros can use + in the argument list to indicate that an argument may repeat at least once, or *, to indicate that the argument may repeat zero or more times.

In the following example, surrounding the matcher with $(...),+ will match one or more expression, separated by commas. Also note that the semicolon is optional on the last case. // min! will calculate the minimum of any number of arguments. macro_rules! find_min { // Base case: ($x:expr) => ($x); // $x followed by at least one $y, ($x:expr, $($y:expr),+) => (
// Call find_min! on the tail $y std::cmp::min($x, find_min!($($y),+))
)
}

fn main() {
println!("{}", find_min!(1u32));
println!("{}", find_min!(1u32 + 2 , 2u32));
println!("{}", find_min!(5u32, 2u32 * 3, 4u32));
}