Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 15 февраля 2012< ^ >
f[x] установил(а) тему: OCaml / ОКамл / Камль -- http://caml.inria.fr | http://camlunity.ru/ (теперь с git доступом!) | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire
Конфигурация комнаты
Участники комнаты

GMT+4
[00:00:15] <gds> полиморфный -- с каким compare?  а не боишься?
[00:00:46] <Kakadu> extlib gjcvjnhb
[00:00:50] <Kakadu> посмотри
[00:04:33] <bobry> гм, ну я могу сделать свой graph тоже функтором конечно
[00:15:27] <gds> это не нужно в общем случае.  ща расскажу.
[00:20:24] <gds> bobry: вообще, чото ты либо недоговариваешь, либо загоняешься по пустякам.  Опиши более подробно, почему/чем тебе мешает функтор Set.Make.
[00:20:41] <bobry> потому что у меня type 'key graph = ('key, 'key list) Hashtbl.t
[00:20:46] <bobry> и Set мне нужен для 'key
[00:21:36] <bobry> в общем то никто не мешает сделать 'key = string, потому что у нас dep идентифицируется именем
[00:21:50] <bobry> но хотелось бы иметь reusable вариант, "на будущее"
[00:22:36] <bobry> а в extlib только bitset увы
[00:23:32] <gds> то есть, для работы с graph тебе нужно иметь Set, в котором elt привязано к 'key, а compare привязан к Pervasives.compare?
[00:23:44] <bobry> ага, именно
[00:23:47] <gds> reusable -- правильно мыслишь, надо.
[00:24:04] <Kakadu> bobry: сделать set из PolyMap )
[00:24:31] <bobry> Kakadu: шо за PolyMap?
[00:24:39] <Kakadu> bobry: из extlib
[00:24:44] <gds> а если type 'key graph "доработать немножко", добавив туда (module Set.S with type elt = 'key), это будет ахтунг?
[00:24:50] <bobry> тупой вариант заюзать ('key, bool) Hashtbl.t -- типа HashSet :)
[00:25:13] <Kakadu> bobry: тупой вариант превратить PolyMap в PolySet
[00:25:48] <bobry> ну, разницы вощем та немного :)
[00:25:54] <bobry> gds: можешь пояснить, что то не улавливаю
[00:25:58] <Kakadu> bobry: вообще если хэш-функцию f hashtbl можно свою указать, то вообще кавайно будет
[00:26:32] <bobry> по моему нельзя
[00:27:04] <gds> bobry: создать первоклассный модуль, твой graph заменить на { g_set : (module Set.S with type elt = 'key ; g_incidences : Hashtbl.t 'key (list 'key }
[00:27:27] <bobry> по моему вариант с функтором проще, не?
[00:28:16] <gds> смотря что надо на выходе.  я бы 50/50 решал бы, без предпочтений.
[00:28:30] <bobry> на выходе чего? гм
[00:28:34] bobry что то тупит
[00:29:15] <gds> на выходе -- от graph
[00:30:10] <Kakadu> bobry: может граф строить и не надо, тебе же ведь надо только знать достижима ли вершина А из вершины Б
[00:31:40] <bobry> gds: на выходе от graph надо build order, тобишь топологическую сортировку зависимостей
[00:32:00] <bobry> Kakadu: можешь раскрыть?
[00:32:49] <gds> bobry: тогда решай тупейшим образом, закатай всё в функтор и не парься.
[00:34:16] <Kakadu> bobry: дая пока тут отходил сам не понял что сказал
[00:36:03] <bobry> кстати а почему Set и Map определяют свои OrderedType
[00:36:09] <bobry> есть в этом какой то смысл?
[00:36:22] <bobry> почему бы не сделать module type OrderedType = Set.OrderedType
[00:37:44] dzhon вошёл(а) в комнату
[00:38:08] <gds> с практической стороны разницы нет.
[00:38:29] <bobry> а с эстетской?
[00:38:38] <bobry> ну или эстетической, w/e
[00:38:45] <Kakadu> bobry: потому что обратная совсместимость
[00:39:03] <Kakadu> вроде бы...
[00:40:18] <bobry> ну щас то понятно что поздно убирать
[00:40:26] <bobry> но почему так было сделано изначально?
[00:42:56] ftrvxmtrx вышел(а) из комнаты
[00:43:10] ftrvxmtrx вошёл(а) в комнату
[00:43:23] <Kakadu> а как ты хочешь чтобы было изначально?
[00:44:18] <bobry> Types.Ordered
[00:45:18] <Kakadu> разверни
[00:46:17] <bobry> ну, можно было бы вынести общеполезные сигнатуры в отдельный модуль
[00:46:27] <bobry> например OrderedType нуже всегда или почти всегда
[00:46:35] <bobry> причем все его каждый раз пишут заново
[00:46:40] <bobry> как то даже странно
[00:49:29] <Kakadu> да зачем... Если какая-то хрень подходит и в один OrderedType то подходит и в другой
[00:52:48] <gds> тут сложный вопрос с тем, всегда ли нужен.  А кому-то понадобится не только OrderedType, но и HashedType.  Очень долго я воевал с собой в поисках копромисса (!), но нормального решения проблемы не нашёл.  Даже если всё закатать в объекты, и то, кое-где косяки вылазят, хотя там, казалось бы, гибче некуда.
[00:53:33] <bobry> gds: ну ведь в х-ле как то умудряются жить со стандартными тайп классами и ничего :)
[00:53:47] <gds> ничего плохого или ничего хорошего?
[00:53:59] <bobry> в конце концов, что мешает делать module type Foo = sig include OrderedType; ... end
[00:54:10] <bobry> ничего плохого по моему
[00:54:52] <gds> а так -- бери каподастыръ и живи с тайпклассами, я проверял, всё работает.  Только стрелочка не "=>", а "->", но это ещё тот самый олег заметил.
[00:56:08] <bobry> та мне пока по чуть чуть надо
[00:57:25] <gds> на пол-шишечки, понимаю.  все с этого начинают.
[00:58:35] <gds> в общем, путь порочный.  потом тебе понадобится кое-что ещё от кадастра, потом ещё.  и это не прекратится никогда, пока ты не скатишься в самые глубины ада.  поэтому бери функторы и не парься.  ты ещё слишком молод для смерти.
[00:58:58] <bobry> да я уже запилил функтор ага
[01:13:06] komar вышел(а) из комнаты
[01:15:24] komar вошёл(а) в комнату
[01:38:16] komar вышел(а) из комнаты
[01:39:18] komar вошёл(а) в комнату
[02:00:17] <bobry> в общем один фик в итоге буду юзать Hashtbl :)
[02:00:24] <bobry> set'a уже не хватает, ибо хочется еще и циклы поискать
[02:01:13] <bobry> и функтор не надо будет, nice :)
[02:06:43] <bobry> Kakadu: соврал я тебе, таки можно hashtbl со своей хеш-функцией http://caml.inria.fr/pub/docs/manual-ocaml/libref/Hashtbl.HashedType.html
[02:12:06] Typhon вошёл(а) в комнату
[02:12:56] <gds> bobry: 1. тот мой код отрефакторить, убрав кадастр -- не?  2. если есть желание, можно заюзать мою ocaml-lazy-labelled, данные вытягивать через лентяйку, циклы оно тебе покажет само; примерно для того и писал.
[02:15:27] komar вышел(а) из комнаты
[02:18:02] komar вошёл(а) в комнату
[02:20:56] Kakadu вышел(а) из комнаты
[02:26:31] <bobry> gds: я твой код неосилил если честно <_<
[02:27:26] bobry вышел(а) из комнаты
[02:36:49] komar вышел(а) из комнаты
[02:37:12] komar вошёл(а) в комнату
[02:46:48] Typhon вышел(а) из комнаты
[02:50:53] dzhon вышел(а) из комнаты
[02:58:20] komar вышел(а) из комнаты
[03:02:33] komar вошёл(а) в комнату
[03:13:06] letrec вошёл(а) в комнату
[03:57:08] komar вышел(а) из комнаты
[03:57:24] komar вошёл(а) в комнату
[04:22:06] komar вышел(а) из комнаты: Replaced by new connection
[04:22:06] komar вошёл(а) в комнату
[04:42:23] letrec вышел(а) из комнаты
[05:09:41] komar вышел(а) из комнаты
[05:11:41] komar вошёл(а) в комнату
[05:52:57] komar вышел(а) из комнаты: Replaced by new connection
[05:52:59] komar вошёл(а) в комнату
[06:35:10] komar вышел(а) из комнаты
[06:37:02] komar вошёл(а) в комнату
[08:11:46] Typhon вошёл(а) в комнату
[09:23:41] komar вышел(а) из комнаты: Replaced by new connection
[09:23:41] komar вошёл(а) в комнату
[09:50:13] komar вышел(а) из комнаты: Replaced by new connection
[09:50:13] komar вошёл(а) в комнату
[10:11:15] f[x] вошёл(а) в комнату
[10:15:34] bobry вошёл(а) в комнату
[10:20:55] bobry вышел(а) из комнаты
[10:23:27] ftrvxmtrx вышел(а) из комнаты
[10:32:31] Kakadu вошёл(а) в комнату
[10:32:38] komar вышел(а) из комнаты
[10:35:09] komar вошёл(а) в комнату
[10:41:38] ftrvxmtrx вошёл(а) в комнату
[11:07:30] komar вышел(а) из комнаты
[11:10:00] komar вошёл(а) в комнату
[11:12:20] f[x] вышел(а) из комнаты: Computer went to sleep
[11:16:34] superbobry вошёл(а) в комнату
[11:21:38] <superbobry> gds, у тебя в кадастре случаем rose trees нету?
[11:24:51] ftrvxmtrx вышел(а) из комнаты
[11:51:14] <superbobry> хотя вощем та написать их -- фигнявопрос
[11:52:38] ermine вошёл(а) в комнату
[11:54:55] <f[x]> gds: наследование и типизация это разные вещи
[11:55:05] <f[x]> хочешь скрыть метод - скрывай сигнатурой
[11:58:31] komar вышел(а) из комнаты: Replaced by new connection
[11:58:31] komar вошёл(а) в комнату
[12:09:24] ftrvxmtrx вошёл(а) в комнату
[12:24:27] Typhon вышел(а) из комнаты
[12:25:37] komar вышел(а) из комнаты
[12:25:47] Typhon вошёл(а) в комнату
[12:26:00] komar вошёл(а) в комнату
[13:00:00] komar вышел(а) из комнаты
[13:00:01] komar вошёл(а) в комнату
[13:11:41] Typhon вышел(а) из комнаты
[13:25:45] komar вышел(а) из комнаты: Replaced by new connection
[13:25:45] komar вошёл(а) в комнату
[13:42:59] shaggie вошёл(а) в комнату
[14:08:47] Typhon вошёл(а) в комнату
[14:10:50] komar вышел(а) из комнаты
[14:12:20] <gds> superbobry: rose tree -- нет.
[14:13:28] <gds> f[x]: то есть, в .mli, условно говоря, прописать более ограниченный тип?  пробовал, та же ругань, но вдобавок про "имплементация не соответствует интерфейсу".
[14:13:40] <f[x]> хм?
[14:13:46] <gds> впрочем, могу повторить эксперимент, так как во всех деталях полностью не уверен.
[14:14:07] <gds> да, если это тебя удивляет, я повторю эксперимент, только чуть позднее.
[14:14:44] <gds> сейчас ещё слишком раннее утро для суровой этойсамой с окамлом :)
[14:19:46] komar вошёл(а) в комнату
[14:20:54] <f[x]> наверное не в mli, а кастить в тип
[14:25:04] <gds> вот я и пытался кастить в тип.  попытки показал.  по идее, нужны coercions, но не получается.  object..end в них заворачивал, ругается.  в (self :> ..) всовывал, после аргументов класса пробовал указать, безрезультатно.
[14:25:26] <f[x]> стра
[14:27:06] <gds> думаю ещё раз перечитать пару глав манула и, если не будет влом, спросить в рассылке.  ну и погуглить перед этим.
[15:11:43] komar вышел(а) из комнаты
[15:15:42] komar вошёл(а) в комнату
[15:41:51] <gds> ещё очень странный момент.  я раньше думал, что let rec генерализует все типы сам, и, если привязка оказывается полиморфной (т.е. можно вывести полиморфный тип), то он будет выведен.  однако, без явной аннотации чото не получается: http://paste.in.ua/3875/
[15:42:04] komar вышел(а) из комнаты: Replaced by new connection
[15:42:05] komar вошёл(а) в комнату
[16:09:15] <f[x]> gds: я с трудом распознаю камль в твоём коде!
[16:09:57] <gds> ocaml not found, garbage dropped!11
[16:10:28] <superbobry> так досадно что вместо $ в камле принято юзать &
[16:10:58] <gds> это досадно, что в х-е вместо & почему-то выбрали $
[16:11:00] <superbobry> особенно из за того что для & есть дефолтное определение в pervasives
[16:11:17] <superbobry> gds: $ хотя бы не булевая операция
[16:11:24] <superbobry> и не арифметическая как %
[16:11:25] <gds> & теперь тоже!
[16:11:35] <superbobry> в этом как раз вся проблема :)
[16:11:41] <superbobry> абьюз первоначального смысла
[16:11:55] <gds> & оставлено для тупой совместимости.  булевая -- &&.
[16:12:33] <superbobry> true, но глазам все равно не привычно
[16:13:13] <gds> эдак тебя скоро начнёт раздражать строгий порядок вычислений.
[16:21:02] <superbobry> не, он меня как раз радует
[16:32:59] letrec вошёл(а) в комнату
[16:38:09] komar вышел(а) из комнаты
[16:38:39] komar вошёл(а) в комнату
[17:47:55] Dagdagiel вошёл(а) в комнату
[17:49:49] gds' вошёл(а) в комнату
[18:15:19] <f[x]> >  let ( * ) = Int64.mul in
только что написал, самому смешно
[18:17:13] <superbobry> :D
[18:18:27] komar вышел(а) из комнаты: Replaced by new connection
[18:18:28] komar вошёл(а) в комнату
[18:26:47] komar вышел(а) из комнаты: Replaced by new connection
[18:26:48] komar вошёл(а) в комнату
[18:53:21] gds' вышел(а) из комнаты
[18:54:09] letrec вышел(а) из комнаты
[18:58:31] Dagdagiel вышел(а) из комнаты
[18:58:42] komar вышел(а) из комнаты: Replaced by new connection
[18:58:43] komar вошёл(а) в комнату
[19:43:51] <superbobry> йома, что может быть хуже С?
[19:43:54] <superbobry> int tm_mon;  /* months since January [0-11] */
[19:44:00] <superbobry> дни с нуля считают
[19:44:14] <ftrvxmtrx> why not?
[19:44:15] <superbobry> дни с нуля считают
[19:45:14] <gds> > что может быть хуже С?
только C++!
[19:46:04] <f[x]> man localtime
[19:46:32] <superbobry> то что это где-то описано ничего не меняет
[19:46:48] <f[x]> это low-level интерфейс к libc
[19:47:18] <f[x]> если ты перепутал его с general-purpose либой для подсчёта лунных затмений - это твои проблемы
[19:47:31] <f[x]> для удобного интерфейса есть calendar
[19:47:40] <superbobry> ок, вопрос -- почем при дизайне libc использовали такой финт?
[19:47:44] <superbobry> сэкономили один инт?
[19:48:15] <f[x]> не знаю, там куча исторических отложений же
[19:48:55] <ftrvxmtrx> дело не в libc, а в C
[19:49:01] <ftrvxmtrx> это стандарт
[19:50:33] <ftrvxmtrx> ну и очевидно, что в таком виде легко использовать tm_mon в кач-ве индекса
[19:50:49] <f[x]> а, точно, posix же
[19:51:06] <ftrvxmtrx> да это даже не posix, просто C
[19:51:15] <f[x]> даже так
[19:51:16] <f[x]> ну ок
[20:14:07] Typhon вышел(а) из комнаты
[20:24:48] ftrvxmtrx вышел(а) из комнаты
[20:33:36] superbobry вышел(а) из комнаты
[21:43:58] bobry вошёл(а) в комнату
[21:46:57] shaggie вышел(а) из комнаты
[23:06:49] dzhon вошёл(а) в комнату
[23:29:37] <bobry> Hashtbl.keys где, я вас спрашиваю? :)
[23:29:47] <bobry> или может быть Hashtbl.values?
[23:29:54] <bobry> опять велосипедить через fold?
[23:32:03] ermine вышел(а) из комнаты
[23:34:03] <gds> велосипедить -- это когда больше одной строки.
[23:37:52] <bobry> именно такие мелочи бесят больше всего ):
[23:51:02] <bobry> ну или Hashtbl.find ~default:...
[23:51:08] <bobry> разумеется никому не нужна такая функция
[23:51:19] <bobry> ну или на крайняк find_opt
[23:53:44] <gds> вот поражаюсь, грызёшь кактус и тебе, вроде, нравится.
бери extlib/batteries или напиши тупые однострочные функции для реализации этой функциональности.
[23:54:55] <bobry> я думаю что как только у нас появится bootstrap -- надо будет перейти batteries
[23:56:46] <gds> батарейки замучаешься компилировать падвендами всякими.  хотя, может, пофиксили.  а вот extlib можно даже сейчас всунуть в /src/ext/extlib и указать это в -I, и всё будет работать.
[23:57:08] <gds> как помню, процедура сборки у extlib тупейшая, даже инсталлировать extlib не надо.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!