Home
Objective Caml
ocaml@conference.jabber.ru
Воскресенье, 16 августа 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся!
Конфигурация комнаты

GMT+4
[00:19:57] <ermine> gds: та функция была чтобы изменить тип
[00:24:35] <ermine> типа string option -> int option
[01:06:42] <gds> тогда не совсем bind, но через монадные bind + return таки выражается.
я в название подобных функций добавляю "map", чтобы было ясно. Эта называлась бы типа "opt_map".
[01:13:27] <ermine> я ассоцирую map с чем-то спископодобным
[01:14:26] sceptic map должен быть для всего! *generic*
[02:17:41] <gds> при ковырянии теории категорий оказывается, что map вообще штука замечательная. Не важно, списки там или нет -- для всего оно хорошо.
Однако, эти люди из своих ivory towers зовут это "морфизм". Жалкие, противные людишки.
Изучаю "Таблицу Квадратных Уравнений" и просто смеюсь над ними.
[02:22:09] <gds> кстати, мелкий комментарий про теорию категорий. На данный момент лично мне с практической стороны эта наукоподобная уита, конечно, указывает на возможности структурирования и оптимизации кода, но, фактически сводится к грамотному учёту "области определения" и "области допустимых значений" функции. Что верблюжатники, не обделённые ынцэлектом, вполне понимают.
[02:22:54] gds дрыхне
[06:38:20] john вышел(а) из комнаты: Replaced by new connection
[06:38:21] john вошёл(а) в комнату
[10:17:45] ygrek вошёл(а) в комнату
[10:21:21] <ygrek> maybe это Option.map из extlib
[11:00:10] ermine не юзает extlib
[11:00:36] <ermine> ygrek: а че, надо линковаться с extlib ради одной-двух функций? :)
[11:01:02] <ygrek> да
[11:01:13] <ermine> нюню
[11:01:26] <ermine> даже если функции - одностночники
[11:01:36] <ygrek> да
[11:01:44] <ygrek> во-вторых гораздо более одной
[11:02:15] <ygrek> в-третьих улучшается понимание
[11:03:01] <ermine> в четвертых получаем дерево депентдсов не хуже чем у перла
[11:03:33] <ygrek> а лучше конечно дерево копипасты :)
[11:04:19] <ygrek> открываем например sulci/common.ml
[11:04:28] <ygrek> и называем функции из extlib
[11:04:33] <ermine> даже с тем небольшим деревом депендсов, что у сульци, у юзеров разных операционок разные мороки
[11:04:58] <ygrek> ой, а кто там что-то говорил про ослиный мостик?
[11:05:21] <ermine> гг
[11:05:50] <ygrek> ну и уж с extlib проблем точно нет. т.е. меня например ломает тащить ocamlnet в проект ради netencoding, есть такое.
[11:06:34] <ermine> ослиный мостик из-за того, что не отписания в svn версии как собирать (в тарбольном варианте есть слово про make)
[11:07:19] <ermine> а вот когда лузер бубунту или дебиана ставит библиотеки вразнобой для двух версий камля и удивляется, пчу сульци не собирается
[11:08:37] <ygrek> ясно, ну хорошо хоть кто-то заботится о юзерах. Я лично всегда стараюсь _себе_ жизнь упростить.
[11:08:57] <ygrek> в первую очередь
[11:10:37] <ermine> это естественно
[11:10:45] <ermine> но мне скоро придется упростить для юзера
[11:10:52] <ygrek> вообщем аргументация не использовать внешние зависимости, а писать велосипеды, потому-что иначе пользователям тяжко -- мне почему-то кажется ущербной (и это касается не только камля, у нас на работе в плюсовых проектах товарищи отказывались исопльзовать буст потому-что де размер бинарника увеличивается)
[11:11:39] <ygrek> а для упрощения жизни юзера существуют бинарные пакеты - и программеры сыты, и юзеры целы :)
[11:11:58] <ermine> ууу, велосипедов у меня дофига
[11:12:25] <ygrek> и текущий рефакторинг имеет цель от них избавиться - да да да :) (угадал?)
[11:13:33] <ermine> не факт
[11:13:40] <ygrek> эз
[11:13:43] <ygrek> эх
[11:13:47] <ermine> например, в ocamlnet есть таблицы перекодировки
[11:13:59] <ermine> два года назад я написала свои таблицы
[11:14:02] <ermine> :)
[11:14:47] <ermine> другой велосипед - парсер хмля
[11:15:21] <ermine> еще два велосипеда - биндинги к ssl/tls и zlib
[11:15:39] ermine пытается вспомнить что там еще из лисапедов
[11:16:23] <ermine> мог бы быть еще один, если я так и не найду как в labltk прицепить интерпретатор tcl
[11:17:36] <ermine> в общем, есть еще дофига интересного
[11:19:32] ygrek подозревает что эти лисапеды делались не ради того чтобы пользователь не качал лишнюю либу
[12:30:51] <ermine> а в чем главное отличие между Set и Map?
[12:31:14] <ermine> а, нету find?
[12:31:49] <ermine> странно, что mem в Set есть
[12:42:24] <ermine> блин, хочу Map, который берет не раздельно key, data, а одно data
[12:45:49] <ygrek> а чем Set не устроил?
[12:46:25] <ermine> а не вижу как в нем искать
[12:48:09] <ygrek> filter
[12:48:30] <ermine> бююз
[12:48:44] <ermine> ладно, буду юзать Map
[12:49:53] <ermine> там все равно не -> elt на конце
[12:50:16] <ygrek> э, а там критерий поиска - elt
[12:50:22] <ygrek> зачем его искать? ;)
[12:50:54] <ygrek> let find set x = if Set.mem set x then x else failwith "oops"
[12:51:06] <ermine> ну мне нужен упорядоченный список типа рекорда
[12:51:27] <ygrek> т.е. key value pair'ы
[12:51:33] <ermine> и иногда вынимать одну запись по ключу и поизменять мутабельные поля
[12:51:40] <ygrek> т.е. Map
[12:52:05] <ermine> вот щас погляжу можно ли получить упорядоченный список ключей
[12:52:50] <ermine> "невижу"
[12:52:52] <ermine> ы-ы-ы
[12:53:24] <ermine> хоть пиши опять свой велосипедь
[12:59:07] <ermine> а вот интересно, Map.iter работает в упорядоченном списке ключей от минимального к максимальному?
[12:59:16] <ermine> или Map.mapi
[12:59:46] <ermine> а то по исходникам не видно, что оно считает корнем дерева
[13:04:29] <ermine> ага упорядоченный
[13:07:39] <ygrek> в доке написано. The bindings are passed to f in increasing order with respect to the ordering over the type of the keys.
[13:10:06] <ermine> ыгы
[13:12:23] <ermine> неужто придется дергать fold каждую секунду, чтобы проверить наличие ника в мессаге, ы-ы-ы
[13:13:48] <ermine> ладно, проблем пожалуй нет
[13:30:12] john вышел(а) из комнаты
[14:41:53] sevenov вышел(а) из комнаты
[14:42:07] sevenov вошёл(а) в комнату
[14:51:21] <gds> кстати вот, в сборке sulci уже есть механизм сборки своих библиотек -- make lib[s], что ли. И отличия между extlib и ocamlnet весьма существенны -- первое собирается всегда и везде, так как чисто окамловская и не использует низкоуровневые функции, и сборка очень проста.
[15:14:30] <gds> а насчёт поиска -- нередко используется идиома вида
exception My_exn of my_type (* например, of bool *)
try
( Map.iter ... (fun item -> if is_ok item then raise My_exn my_value else () )
; when_not_found
)
with My_exn v -> v
[15:16:21] <gds> то есть, смысл такой: fold будет ворошить всю мапку, а бросание исключения в среднем в два раза сократит время поиска.
[17:38:43] sevenov вышел(а) из комнаты: Replaced by new connection
[17:38:45] sevenov вошёл(а) в комнату
[18:21:37] sevenov вышел(а) из комнаты: Replaced by new connection
[18:21:38] sevenov вошёл(а) в комнату
[18:35:57] <ermine> gds: в ocamlnet есть "низкоуровненные" функции
[19:20:03] john вошёл(а) в комнату
[19:47:17] sceptic вышел(а) из комнаты
[19:49:46] ermine хочет типы с партиал аппликешнем, такое бывает?
[19:50:57] sceptic вошёл(а) в комнату
[19:52:23] <gds> ermine: я про то же -- низкоуровневые есть, потому сборка обычно -- боль.
[19:52:49] <gds> типы с partial application, как замечал недавно в чятике, не бывают (в чистом виде). Опиши задачу, почти всегда есть выход.
[19:56:53] <ermine> хочу комплектовать аргументы типа sum по ходу кода
[19:59:22] <ermine> как вариант - породить еще один тип sum и в конце кода делать нормальные результаты
[19:59:34] <ermine> но я не люблю таких дублей
[20:00:12] <gds> рисуй конкретный sum type, не указывай его нигде в явном виде (чтобы не перерисовывать), а там разберёшься.
однако не очень понял задачу, по-любому пример нужен.
а то вдруг есть другой и кошерный метод сделать нужное тебе.
[20:03:15] <ermine> я пока только щас обнаружила проблему и еще не успела обдумать как следует :)
[20:04:38] <gds> как оформишь технические требования, но до того, как начнёшь обдумывать, как их реализовать, выплюнь их в чятик, подумаем. заодно лишняя вербализация не повредит.
[23:20:03] sceptic вышел(а) из комнаты
[23:23:14] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!