In Scheme there's a let loop construct which is essentially the same as creating a self-recursive lambda in-place (aka 'named let'). For example, a factorial of 6 can be written as:
(let fact ([x 6])
(if (< 1 x)
(* x (fact (- x 1)))
x))
The question is: is there any alternative in elisp. And if there exists one, does it perform tail recursion optimization where possible?