w3resource

Apply Closure Iteratively in Rust

Rust Closures and Higher-Order Functions: Exercise-5 with Solution

Write a Rust function that takes a closure and a starting value, applies the closure iteratively, and returns the final result.

Sample Solution:

Rust Code:

fn apply_closure_iteratively<F, T>(mut closure: F, mut initial_value: T, iterations: usize) -> T
where
    F: FnMut(T) -> T, // Closure trait bound
    T: Copy, // Required for cloning initial value
{
    for _ in 0..iterations {
        initial_value = closure(initial_value); // Apply the closure to the current value
    }
    initial_value // Return the final result
}

fn main() {
    // Example usage:
    let result = apply_closure_iteratively(|x| x * 3, 1, 6);
    println!("Final result: {}", result); // Output: 729 (1 * 3 * 3 * 3 * 3 * 3 * 3)
}

Output:

Final result: 729

Explanation:

In the exercise above,

  • The "apply_closure_iteratively()" function takes three parameters:
    • closure: A closure that takes a value of type 'T' and returns a value of the same type.
    • initial_value: The starting value for the iterative process.
    • iterations: The number of times the closure should be applied iteratively.
  • Inside the function, a "for" loop iterates 'iterations' times.
  • In each iteration, the closure is applied to the 'initial_value', and the result becomes the new 'initial_value'.
  • After all iterations are completed, the final result is returned.

In the example provided in the main function, the closure |x| x * 3 triples the input value. The function "apply_closure_iteratively()" is called with an initial value of 1 and 6 iterations. The final result, 729, is printed.

Rust Code Editor:


Previous: With Rust Higher-Order Filter integers function.
Next: Rust String Transformation Function.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/rust/functional-programming/rust-closures-and-higher-order-functions-exercise-5.php