#include <stdio.h>
// 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.
// We simulate a closure using a struct that stores state + a function pointer
typedef struct {
int n; // captured value
int (*fn)(int x, int n); // function pointer that uses captured value
} Multiplier;
// Function used by the "closure"
int multiplyImpl(int x, int n) {
return x * n; // Uses the captured value n
}
// makeMultiplier is a higher‑order function because it RETURNS another function-like object
Multiplier makeMultiplier(int n) {
// This inner function forms a closure and remembers the value of n
Multiplier m;
m.n = n;
m.fn = multiplyImpl;
return m;
}
int main() {
// double is now a function-like object created by makeMultiplier(2)
// It remembers n = 2 through stored state
Multiplier doubleFn = makeMultiplier(2);
// Calling doubleFn.fn(10, doubleFn.n) multiplies 10 by the captured n (which is 2)
printf("%d\n", doubleFn.fn(10, doubleFn.n));
return 0;
}
/*
run:
20
*/