// A higher‑order function is a function that does at least one of the following:
// 1. Takes another function as an argument
// 2. Returns a function as its result
// If it does either one, it qualifies.
// Higher-order function: takes a function as an argument
fn apply_twice<F>(fnc: F, x: i32) -> i32
where
F: Fn(i32) -> i32,
{
fnc(fnc(x))
}
// A simple function to pass in
fn add3(n: i32) -> i32 {
n + 3
}
fn main() {
// Use the higher-order function
let result = apply_twice(add3, 5); // 5 + 3 = 8 + 3 = 11
println!("{}", result);
}
/*
run:
11
*/