Oh ! Le beau point fixe !

Ce matin, j’y suis arrivé.

Ça n’a pas été facile. Je suis d’abord arrivé au concept :

y = lambda F : (lambda f : F(f(f))) (lambda f : F(f(f)))

mais évidemment ça n’a pas marché, en Python. Évaluation trop rapide, trop directe, trop stricte

Alors j’ai trituré mon expression, et je l’ai enfin matée :

y = lambda F : (lambda f : lambda x : F(f(f))(x))
               (lambda f : lambda x : F(f(f))(x))

C’est très joli :

>>> fact_ = lambda fn : lambda n : n and n*fn(n-1) or 1
>>> fact = y(fact_)
>>> fact(6)
720

J’aime. :)

Et sans tricher !