PostScript
Le Y combinator comme un nom de fonction avec pas explicite des variables liaisons (pressé pour tenir sur une seule ligne :D):
{[{[exch{dup exec exec}aload pop]cvx exec}aload pop 10 9 roll exch]cvx dup exec}
En fait, c'est l'applicatif ordre de Y combinator, adapté de Régime.
Comme exemple, voici comment l'utiliser pour calculer la factorielle d'un nombre entier non négatif:
%%% Read from stdin (input should be a nonnegative integer)
(%stdin) run
%%% Factorializer -- a function that takes a function as input;
%%% this computes the factorial by doing everything except the recursive step
%%% and then calling the input function as the recursive step
{[{dup 0 eq exch {1} exch [exch dup 1 sub exec mul} aload pop
[6 1 roll 16 15 roll 3 1 roll] cvx {aload pop] cvx ifelse} aload pop] cvx}
%%% Y combinator -- takes the factorializer as input and returns a function that
%%% computes the factorial of any nonnegative integer
{[{[exch {dup exec exec} aload pop] cvx exec} aload pop 10 9 roll exch]
cvx dup exec}
%%% Apply Y combinator to factorializer to produce factorial function;
%%% then apply factorial function to input number and print the result
exec exec =
Utilisation: $ echo 20 | gs -q -dNODISPLAY -dNOPROMPT -dBATCH thisfile.ps
Sortie: 2432902008176640000
Pas de itératif de boucles, pas de noms de fonctions, pas même variable locale liaisons.*
PostScript est l'ultime langage de programmation fonctionnel.
*Vous pouvez également utiliser l'un de ces PostScript, mais ce nameless version est vraiment cool.