Home
Objective Caml
ocaml@conference.jabber.ru
Суббота, 18 июня 2011< ^ >
gds установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Светлое будущее -- http://camlunity.ru/ | Нефильтрованное настоящее -- https://github.com/camlunity/kamlo_wiki | Портер прошлое -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:05:39] ermine вышел(а) из комнаты
[00:19:00] bobry вошёл(а) в комнату
[00:24:20] ygrek вышел(а) из комнаты
[01:06:39] komar вышел(а) из комнаты: Replaced by new connection
[01:06:39] komar вошёл(а) в комнату
[01:15:14] bobry вышел(а) из комнаты
[01:21:07] arhibot вошёл(а) в комнату
[01:24:11] arhibot вышел(а) из комнаты
[01:24:12] arhibot вошёл(а) в комнату
[01:28:03] arhibot вышел(а) из комнаты
[01:58:03] bobry вошёл(а) в комнату
[02:46:30] bobry вышел(а) из комнаты
[03:00:45] zert вышел(а) из комнаты
[03:48:13] n1tn4tsn0k вышел(а) из комнаты: QIP 2010: Спокойное общение
[03:48:45] Typhon вышел(а) из комнаты
[08:49:21] zinid вошёл(а) в комнату
[10:10:43] ygrek вошёл(а) в комнату
[10:16:34] ygrek вышел(а) из комнаты
[10:17:10] ygrek вошёл(а) в комнату
[10:38:24] <ygrek> и чё, опять похакали сервер что-ли?
[10:38:34] <ygrek> дырявый ырланк
[10:39:37] <zinid> какой сервер?
[10:39:43] <ygrek> а, или zinid тоже админ
[10:39:54] <zinid> ырланк рулит же ;)
[10:40:07] <ygrek> та ходют тут всякие owner'ы неопознанные
[10:40:18] <zinid> а чо поделать...
[10:47:04] <zinid> ygrek: я видел тебя в чейнджлоге ragel'я
[10:47:17] <zinid> ygrek: ты прикрутил ocaml-бэкенд?
[10:51:19] <ygrek> угу
[10:53:21] <zinid> круто
[10:55:18] <ygrek> :)
[11:11:35] ygrek вышел(а) из комнаты
[11:11:39] ygrek вошёл(а) в комнату
[11:40:15] Typhon вошёл(а) в комнату
[11:40:46] Typhon вышел(а) из комнаты
[11:42:44] bobry вошёл(а) в комнату
[11:47:52] ermine вошёл(а) в комнату
[13:13:17] Typhon вошёл(а) в комнату
[15:04:37] ygrek вышел(а) из комнаты
[15:09:38] ygrek вошёл(а) в комнату
[15:27:29] Typhon вышел(а) из комнаты
[15:44:53] <gds> странное дело, откуда-то берутся двойные слеши с оазисом: http://paste.in.ua/2617/ -- периодически это было признаком ошибки, допущенной при работе с путями.  Да и вообще, негламурно.  В какую сторону разбираться?
[15:45:41] <gds> где именно -- последняя строка, "I: Running command '/home/gds/dev/ovm/ocaml/bin/ocamlbuild [...] tests//test_uri.native [...]"
[15:48:05] <ermine> Path: ./ ?
[15:49:16] <gds> ermine: недопонял.
[15:49:47] <ermine> в файле _oasis есть такая волшебная строчка?
[15:50:43] <gds> о.  Похожее есть: "Path: tests/".  Теперь всё понятно.  Наверное, надо убрать последний слеш?  Или он на что-то влияет?
[15:52:42] <ermine> ну судя по строчке, ноги оттуда растут
[15:53:36] <ermine> а вообще не должно влиять
[15:53:44] <ermine> проблема где-то еще
[15:54:25] <ermine> ну в интерпретаторе посмотри как Filename.concat склеивает
[15:54:27] <gds> не, проблема пока в том, что не гламурно, и в теории может повлияет.
[15:55:40] <gds> в общем, забью пока, а потом, если не забуду спросить у Typhon'а, что там имеется ввиду -- он же помог в эту либку добавить оазис, может и тут поможет.
[15:58:39] <gds> кстати, дамы и господа, подскажите пожалуйста такую штуку.  Где-нибудь видели идеальную в плане концептуальной прямоты библиотеку или вообще поддержку десятичных чисел?  Где-то около базок данных, где многие числа decimal fixed point.  Если видели, подскажите, где.  Особенно интересно, как эта fixed point меняется при арифметических операциях.
[16:01:05] <ermine> аштойта?
[16:06:13] <gds> ermine: это вот когда в реляционке объявляешь столбец с типом number(18, 2) для хранения чисел, имеющих 2 десятичных знака после запятой и не более 18 десятичных цифер всего, и работаешь с этим.
[16:25:50] <ermine> %.2g
[16:26:06] <ermine> %8.2g
[16:33:10] <ermine> gds: это ведь представление, а не арифметика?
[16:33:28] <gds> у тебя -- представление, а мне интересна арифметика.
[16:34:02] <ermine> а бывает такая?
[16:34:24] <ermine> 10.2 / 5.3 скока должно быть в твоей арифметике?
[16:36:15] <gds> такая -- бывает.  сколько будет -- зависит от арифметики, которая как раз интересна.  понятно, что точного результата не будет, но интересно, кто как округляет.
[16:37:04] <gds> с умножением -- не менее интересно.  например, 1.1 * 2.1 * 3.1 * ... будет добавлять по десятичному знаку к каждому следующему результату, что на практике не ок.
[16:39:17] <ermine> поэтому я предполагаю, что лучше декодить/енкодить, а не страдать фигней
[16:41:01] <ermine> и в енкодинге применить единое правило для округления
[16:41:19] <ermine> то самое, которому в школе обучают
[16:41:24] <gds> ermine: куда именно енкодить/декодить?
[16:42:04] <ermine> gds: ну декодить из представления, енкодить в представление
[16:42:58] <ermine> это, конечно, лишь мое самозабвенное имхо
[16:46:04] <gds> ermine: понятно, что должно быть какое-то представление этих чисел, даже окамловский тип.  Но какая арифметика должна быть -- не представляю.  Понятно, что не во float считать.
[16:50:39] <ermine> пчу не float?
[16:51:06] <ermine> а другой арифметике ни в школе, ни в вузах вроде и не обучают
[16:51:55] <ermine> вот когда учат считать рубли и копейки - то применяют две целочисленные арифметики
[16:52:59] <ermine> а там кстати как 5.20 делят на 1.30?
[16:56:26] <ermine> gds: тут видимо еще семантика точки имеет роль, часы с минутами тоже как-то арифметируются, но по другой базе слегка, но и там тоже надо декодить во что-то минимальное
[16:56:56] ermine захлопнула свой клапан безудержной фантазии
[16:57:25] <ermine> надо блин дописать парсеры
[17:05:47] <gds> ermine: не float -- потому что он округляет при сложении-вычитании.  Там, где используют number в реляционках, используют их в основном для двух целей: 1. целые числа с number(N)  ( = number(N, 0)), 2. хранение количества денег, где произвольные округления недопустимы.  А какие допустимы -- вот интересно.  (остальные использования -- наподобие "количество в тоннах с точностью до граммов" = number(N, 6), или "норма расхода материала с точностью не более 10г на тонну" = number(N, 5)).
Но я сам лично писал код вида "select round(round(round(a*b, 2) / 1.063, 2) * 1.05, 2) ...".  Для бухгалтерии, которая каждый промежуточный результат округляет, потому что он является суммой денег с точностью до копеек, а дробных копеек не ввели пока.
арифметике ieee754 тоже в школе не обучают, слава с-т-не.
если точность оставить фиксированной, равной двум (либо "как у первого аргумента", либо "как у второго аргумента"), то результат очевиден: 10.2 / 5.3 = 1.92.  Понятно, что деление не будет обратным к умножению.  Но в float это тоже так, и тоже не проблема.  Просто там и тут -- по-разному.
[17:15:11] <ermine> и тут надо округлить до двух
[17:15:43] <ermine> у меня семантика такая - со скольких народу надо собрать бабла
[17:25:44] <gds> ermine: а ещё бывает "по сколько бабла собрать с человека".  Вывод: одной, заранее выбранной операцией деления -- не отделаться.
[17:35:59] Typhon вошёл(а) в комнату
[17:42:55] ermine вколотила в свой маркдаун игнорилку кривых форматтеров и пошла гулять
[18:40:42] <gds> ermine: как у тебя средствами комбайна будет записываться проверка того, что строка удовлетворяет регекспу "('-' | '+')? \d* ('.' \d*)?"?
[18:44:08] ygrek вышел(а) из комнаты
[18:44:32] ygrek вошёл(а) в комнату
[19:13:01] Typhon вышел(а) из комнаты
[19:30:29] zinid вышел(а) из комнаты
[20:31:34] ftrvxmtrx вышел(а) из комнаты
[20:33:57] ftrvxmtrx вошёл(а) в комнату
[21:17:31] ermine приволоклась с прогулки, сожжено 600 гр жира
[21:17:55] <ermine> gds: ша напишу связку комбинаторов для этой отдельной задачки
[21:20:12] <gds> ermine: если лень, то забей.  Криво-косо решил, но вообще, если бы была легковесная либа с известным автором, было бы повеселее.
[21:24:02] <ermine> gds: нет, не лень, задача классическая, мне ее приходилось решать в разных парсилках, щас интересно посмотреть как у меня получится, тем более что у меня в этот раз нет аккумуляторов кусков инпута
[21:25:20] ermine понадеялась, что напустила достаточно пыльного тумана в глаза gds
[21:28:05] <gds> про кумулятырымдыр -- не в курсе.  Кстати вот, в плане жырка -- таки в курсе (сам полужыробас), и немало уходит через пот, поэтому, если смотрела чисто на весы до и после, то всё объяснимо.  А на деле -- не факт, что 600г.  Вот она, разница между бенчмарками и профайлингом IRL!!!111
[21:29:14] <ermine> gds: у меня тут встречный вопрос есть
[21:29:35] <ermine> ('-' | '+')? - тут есть дефолтное значение или важно, что было пусто?
[21:31:05] <gds> ermine: важно, чтобы могло быть пусто.  Парсим что-то типа текстовой записи плавучки без экспонент.  То есть, штука опциональная.  Кстати, для моей задачи на самом деле важно только посчитать сколько знаков было в последнем \d*, который, кстати, опционален, что важно.
[21:33:27] <ermine> gds: ну для \d* я бы взяла функцию, которая тестирует инпут и выкусит оттуда подстроку (последовательность), элементы которой удовлетовряют функции тестирования
[21:33:28] <gds> ermine: кстати вот, можно было бы решить итератами, и они бы даже не собирали все подстроки в память, если бы задача была "посчитать количество знаков".  Однако, тут знаков после запятой явно мало, и вот не знаю, какой будет оверхед от всей конструкции.
[21:33:46] <ermine> можно потом посчитать число элементов
[21:34:18] <gds> для первого \d* можно было бы "выбрасывать, пока соответствует", для второго \d* -- скорее "считать элементы, пока соответствует".
[22:27:26] <ermine> хе, нашла бажку в инпуте
[22:27:30] <ermine> в общем, написала
[22:28:19] <gds> пакежька
[22:28:54] <ermine> gds:
let number =
  opt_maybe (element '-' ||| element '+') >>= fun sign ->
  opt_maybe digits >>= fun d1 ->
  opt_maybe (p_element '.' >> digits) >>= fun d2 ->
  return (sign, d1, d2)
[22:31:37] <gds> ermine: а ведь прилично-культурно, чорт возьми.
[22:33:12] <ermine> мне тут пришлось стряпать opt_maybe, который вернет 'a option, как-то не подумала, что такой вариант бывает, а под рукой был opt, который хотел еще и дефолтное значение
[22:33:35] <ermine> потом нашла бажку в выкусывалке подстроки инпута
[22:33:42] <ermine> в общем, полезное отвлечение
[22:35:36] <gds> ermine: всё понял.  Парсер-комбинаторы -- они не лишни и полезны, так что не жалей о времени.  Буду смотреть на твои, но не сейчас.
Кстати, монадные парсеры концептуально мощнее парсеров на аппликативных функторах.  У меня в todo есть заметка об этом, и в статье про АФ я обязательно это опишу.  То есть, если уж есть монадный интерфейс, то на АФ глядеть не надо.
[22:37:06] <ermine> да комбайна щас в публичном гите нет, я сначала допишу пару парсеров
[22:38:54] <ermine> gds: не, я АФ не видела и не осознала, ничо сказать не могу
[22:41:54] <ermine> но меня смущает иногда, что в моем парсере есть элемент packrat, особенно когда error-recovery или error-ignore
[22:42:32] <ermine> ну точнее нету пакрата, но можно использовать его, чтобы многажды не ездило по одному и тому же месту
[23:41:18] ygrek вышел(а) из комнаты
[23:42:15] Typhon вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!