lomeo: (лямбда)
Dmitry Antonyuk ([personal profile] lomeo) wrote2012-11-30 05:48 pm

Рекурсия

Я это как-то писал, но напишу ещё раз, бо тема поднялась.

Недостатки явной рекурсии по сравнению с комбинаторами (ага, zip3):

  • Рекурсия непонятна (согласен, это субъективное).
  • Обычно используется с декомпозицией, нарушая инкапусляцию.
  • Всегда используется для работы с элементами, вместо работы с коллекцией (wholemeal programming).
  • Цепочка вызовов проще для оптимизации.
  • Сложнее нежно мною любимый equational reasoning.

Юный хаскеллист, избегай явной рекурсии!

Ну и ссылочка, куда без неё!

[identity profile] thesz.livejournal.com 2012-12-01 10:53 am (UTC)(link)
С ошибками даже интересней.

У вас появляется шанс поправить и понять, что не так. ;)

Поправите?
ext_659502: (полосатая свинья)

[identity profile] some41.livejournal.com 2012-12-01 10:47 pm (UTC)(link)
[livejournal.com profile] voidex уже написал правильную функцию сравнения, но делать topological sort через сортировку как-то дико. вместо O(V+E) получается O(logV*V*V). я написал алгоритм из википедии внизу.

[identity profile] thesz.livejournal.com 2012-12-01 11:00 pm (UTC)(link)
Спасибо!

Я, откровенно говоря, не помнил алгоритма топологической сортировки.
ext_659502: (полосатая свинья)

[identity profile] some41.livejournal.com 2012-12-01 11:34 pm (UTC)(link)
да там особенно нечего помнить -- он очевиден, никакой хитрости в нем нет. и если честно, то у меня тоже неправильная сложность из-за lookups в Map и Set. но, думаю, все равно лучше, чем с поисками в полностью развернутом графе.