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 !
Publication Date: