How to use higher-order functions in C

2 Answers

0 votes
#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.

// Higher-order function: takes a function as an argument
int applyTwice(int (*fn)(int), int x) {
    return fn(fn(x));
}

// A simple function to pass in
int add3(int n) {
    return n + 3;
}

int main() {
    // Use the higher-order function
    int result = applyTwice(add3, 5); // 5 + 3 = 8 + 3 = 11

    printf("%d\n", result);

    return 0;
}


/*
run:

11

*/

 



answered Jun 3 by avibootz
0 votes
#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

*/

 



answered Jun 3 by avibootz
...