Y - комбинатор
Я пытался узнать о Y - комбинаторы (объяснение на том, что было бы прекрасно, а) и наткнулся на пример из этой wiki. Подробное объяснение по этому вопросу было бы высоко оценено либо в Haskell, либо в Python. Pleaaase! Как использовать Y-Combinator; почему эта бесконечная рекурсия возвращает 9?
Код
fix :: (a -> a) -> a
fix f = f (fix f)
Проблема
Функция называется fix
возвращает 9
когда fix
применяется к (\x -> 9)
, и я понятия не имею, почему; когда я следую за стеком, я представляю f(f ... (fix f) ...)
.
>> fix (\x -> 9)
>> 9