Anonymous recursive functions in Racket
Репозиторий показывает, как в Racket писать анонимные рекурсивные функции без letrec и имен.
Ключевая идея — Y-комбинатор: лямбда получает себя как аргумент и вызывает его для следующего шага.
(define Y
(λ (f)
((λ (x) (x x))
(λ (x) (f (λ (a) ((x x) a)))))))
((Y (λ (fact)
(λ (n)
(if (zero? n) 1 (* n (fact (sub1 n)))))))
5) ; 120
Такой приём работает для любой рекурсии: факториал, fib, обход списков и т.д.