gds 21.02.2012 21:42 umodniB4E8AE0A

(кто читал это в чятике, дальше не читайте.)
в качестве отдыха решил изобразить на окамле весьма тупую "топологическую сортировку", бесстыдно эксплуатирующую ленивый порядок вычислений.
исходник: http://paste.in.ua/3901/
почему решил показать — потому что многие люди не уверены, что на окамле подобное возможно записать, причём без большого количества синтаксического мусора.
однако, для реаллайфа напрямую использовать подобный подход — негодно. Надо взять https://bitbucket.org/gds/ocaml-lazy-lab... , чтобы была внятная диагностика на случай наличия циклов.

1. borman 22.02.2012 04:24

Хм, в камле есть ленивые вычисления? Не знал. Алсо алгоритмы на графах в ФП — срыв башки, там нужны какие-то другие хорошие практики. Есть какая фундаментальная литература на этот счет?

2. gdsborman /1 22.02.2012 12:50 umodni637FD30C

есть, куда они денутся :) модуль Lazy в стандартной библиотеке. разве что, по сравнению с х-ем, чуть больше синтаксического оверхеда — lazy (expr) для создания ленивого значения и Lazy.force, которую я присвоил префиксному оператору "!" (т.е. "!x" — получение значения, определённого как let x = lazy (...)).

кстати, если бы ленивых вычислений не было, их можно было бы легко изобразить, благо, мутабельность есть. Разве что пришлось бы чуть больше писанины использовать при их создании, а именно, была бы какая-нибудь функция lazy, которая принимала бы unit → 'a, и вместо "lazy expr" было бы "lazy (fun () → expr)" (или "lazy & fun () → expr", на любителя).

про графы в функциональщине — да, срыв башки в лучшем случае, срыв стека или засирание памяти в худшем случае, ну и общая невнятность. Даже в моём примере, я это осознаЮ прекрасно.

Литературу не посоветую. Обычно каждый дрочит как он хочет. Конкретно для окамла есть ocamlgraph, хороший, но чисто для реализации топологической сортировки — не знаю, стоит ли. Есть также fgl, вроде, но его смотрел как-то давно, и при наличии ocamlgraph не особо зацепило, но мне надо было "быстро что-то для графов срочно аааа11111", и пользовал пару раз в жизни всего. Как-то мало нужны были графы мне.

Do you really want to delete ?