Un langage est dit pleinement fonctionnel s'il possède la pleine fonctionnalité.

Grâce aux types fonctions, il est possible, en Pascal, de prendre une fonction en argument ou bien de retourner une fonction existante en résultat.
La pleine fonctionnalité généralise cette possibilité en offrant la capacité de retourner une fonction qui n'existait pas et que l'on a fabriquée à partir d'une (ou de plusieurs) fonction existante.

En voici un exemple spectaculaire, on appel flip la fonction qui inverse les 2 arguments d'une fonction f, la fonction flip peut se construire ainsi:
Et une application de cette fonction pourrait être celle-ci, où (÷) est l'opérateur préfixe de division entière:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
  (f x y |-> f y x) (÷) 3 21
  7
Cette application divise 21 par 3, car l'ordre des arguments de (÷) a été inversé.
Ou plus exactement l'expression flip a créé une nouvelle fonction de division puis cette fonction a été appliquée aux arguments 3 et 21.

Le tableau suivant donne, à gauche, le détail du calcul et, à droite, la règle qui a été appliquée à chaque étape:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
  (f x y |-> f y x) (÷) 3 21
  (f |-> (x y |-> f y x)) (÷) 3 21    (associativité à droite de la flèche)
  ((f |-> (x y |-> f y x)) (÷)) 3 21  (associativité à gauche de l'application)
  (x y |-> (÷) y x) 3 21              (application à (÷) et création d'une nouvelle fonction de x et y)
  7                                   (application à 3 et 21)