Il est utile de pouvoir les passer des fonctions en argument à des fonctions. C'est notamment indispensable pour écrire des algorithmes numériques généraux. Par exemple, on écrira la fonction newton avec deux paramètres fonctionnels pour la fonction f dont on calcule un zéro et sa dérivée fprime :
double newton(double f(double), double fprime(double), int n, double x0) { if (n == 0) { return x0; } else { double x = newton(f,fprime,n-1,x0); return x - f(x)/fprime(x); } }
Techniquement, la valeur qui est passée en argument à une fonction n'est pas l'objet fonctionnel (le code) lui-même, mais l'adresse de ce code en mémoire.