Dans APL, les fonctions peuvent ne pas être adoptées comme arguments aux fonctions. Cependant, APL a des opérateurs, qui sont des fonctions d'ordre supérieur, qui peuvent prendre des fonctions comme des arguments. Il existe des opérateurs primitifs comme / (réduction) utilisés par exemple pour résumer un vecteur + / v. La fonction + est l'opérande gauche et est transmise dans l'opérateur /.
Dans Dyalog APL, il existe un opérateur primitif utilisant le (nommé "Power") pour appliquer une fonction n fois afin que nous puissions écrire:
double←{2×⍵}
(double ⍣ 2) 7
28
(double ⍣ 10) 7
7168
Vous pouvez également écrire vos propres opérateurs (dans la plupart des APL). Dans Dyalog APL, nous pouvons écrire votre opérateur ApplicationTwice comme:
applytwice←{⍺⍺ ⍺⍺ ⍵}
double applytwice 7
28
Enfin, vous pouvez passer des fonctions en les mettant dans un espace de noms et en transmettant l'espace de noms à la place. C'est comme une instance de classe très légère avec une méthode. Par exemple:
s←⎕NS ''
s.f←{2×⍵}
ApplyFTwice←{⍺.f ⍺.f ⍵}
s ApplyFTwice 7
28
Dans ce cas, la fonction doit être nommée F, mais nous pourrions de nombreuses fonctions différentes nommées F, chacune dans son propre espace de noms.