?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Flag Next Entry
Рекурсивная лямбда-функция
nyaload
_winnie
Попытался придумать, как сделать рекурсивную лямбду, в одно выражение. Вот что вышло (Python):

factorial = lambda n : (lambda F : F(n, F))(lambda i, f : 1 if (0 == i) else i * f(i-1, f))

Осторожно, нужен мозг рака (или мозг раком)!

upd:
Я конечно же не первый. http://en.wikipedia.org/wiki/Anonymous_recursion


  • 1
(Deleted comment)
Это что ли читать надо? Зачем? :)

(Deleted comment)
Ну это точно будет мозг раком :D

Не-а, это не Y-комбинатор, это чуть проще. Y-комбинатор получает на вход не функцию типа t :: t -> int -> int, а функцию типа t :: (int -> int) -> int -> int. Поэтому на питоне в одну строчку (при разумной длине строчки) он не пишется, пишется в две. ;-)

... Детектит овнера и лоадит его нативные фонты как дефолтовые ...


Я и не говорил, что именно это является YCombinator'ом :) Просто упомянул его, так как решаются достаточно похожие задачи :)

"Когда эти умники прекратят иллюстрировать рекурсию факториалом?!" по-моему, ещё Н.Вирт.

> Осторожно, нужен мозг рака (или мозг раком)!
Лучше отдельный класс-функцияЮ чем такая лямда.

... а не Аккерман? :)))
Хотя определитель матрицы - тоже весёлое дело.

http://slobin.livejournal.com/205770.html

... Зачем этот долгий и мучительный процесс? ...


Ы. Пока сам не придумашь - не поймёшь :)

Ы-комбинатор! Чтоб никто не догадался!

Это требование одним словом называется "ракурс" :)

пришел по поиску рекурсии в лямбда

(Anonymous)
показалось что факториал можно и так посчитать

f=lambda n: 1 if n==1 else f(n-1)*n

мозгу проще

Re: пришел по поиску рекурсии в лямбда

Суть упражнения для мозга в том, чтобы внутри лямбды не использовать свое собственное имя

  • 1