Home
Objective Caml
ocaml@conference.jabber.ru
Вторник, 3 января 2012< ^ >
ygrek установил(а) тему: 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:32:18] zbroyar вошёл(а) в комнату
[00:55:26] Kakadu вышел(а) из комнаты
[01:52:27] Typhon вошёл(а) в комнату
[02:03:23] gds вышел(а) из комнаты
[02:08:41] ygrek вышел(а) из комнаты
[02:09:03] komar вышел(а) из комнаты: Replaced by new connection
[02:09:03] komar вошёл(а) в комнату
[02:15:46] ftrvxmtrx вышел(а) из комнаты
[02:18:59] ftrvxmtrx вошёл(а) в комнату
[03:36:11] letrec вошёл(а) в комнату
[04:54:34] letrec вышел(а) из комнаты
[04:58:02] Typhon вошёл(а) в комнату
[04:58:17] Typhon вышел(а) из комнаты
[04:58:38] Typhon вошёл(а) в комнату
[06:05:47] Typhon вышел(а) из комнаты: Replaced by new connection
[06:06:07] Typhon вошёл(а) в комнату
[06:06:22] Typhon вышел(а) из комнаты
[06:16:50] zbroyar вышел(а) из комнаты
[07:02:27] komar вышел(а) из комнаты
[07:36:42] komar вошёл(а) в комнату
[10:55:14] Kakadu вошёл(а) в комнату
[11:12:54] gds вошёл(а) в комнату
[11:20:33] ftrvxmtrx вышел(а) из комнаты
[12:02:10] ftrvxmtrx вошёл(а) в комнату
[12:13:00] <Kakadu> блин, сижу гуглю итераты на фадиезе
[12:13:19] <gds> нафига?
[12:13:23] <Kakadu> хочется чтобы код "лексера" был отделен от "парсер-комбинаторов"
[12:13:38] <gds> так отдели руками, чо.
[12:13:39] <Kakadu> чтобы лексер оставить так, а из коминаторов сделать грамматику
[12:13:59] <Kakadu> я хочу болееменее автоматически получать грамматику из комбинаторов
[12:15:17] <gds> а чем мешают комбинаторы, выдающие чисто токены?
[12:15:56] <Kakadu> ммм?
[12:20:35] <gds> как-то идентифицируй комбинаторы, которые выдают тебе токены.  остальное, что сверху них, используй для построения грамматики, а их считай типа-лексером.
[12:22:41] <Kakadu> вот это "как-то" и пугает
[12:22:51] <Kakadu> let p_pred p s = match s with | [] -> Failed | h::t -> if p h then Parsed(h, t) else Failed
[12:23:01] <Kakadu> это кусок лексера или парсера?
[12:23:24] <Kakadu> если закаррировать предикат будет явно кусок парсера
[12:23:33] <Kakadu> а так смахивает на кусок лексера
[12:24:11] <Kakadu> всё-таки хочется чтобы токенизация отдельно, а парсинг отделаьно
[12:28:12] <gds> я не знаю, какие возможности у тебя есть для отделения одного от другого.  если умеешь смотреть типы -- сделай тип type token 'a = 'a и по нему смотри, если функция возвращает его -- это лексер, если принимает его -- это парсер.  или в отдельный модуль выкинь всё лексерное, если умеешь смотреть на идентификаторы.  или, если только значения под рукой, заворачивай комбинаторы в тип Lexer .. | Parser of .., которые в рантайме комбинаторами обрабатывай одинаково, а при построении громатеки обращай внимание на то, лексер это или парсер.
[12:38:53] <Kakadu> кто знает den73 с лора?
[12:39:16] <Kakadu> отговорить бы https://www.linux.org.ru/forum/development/7212405
[12:47:22] f[x] вошёл(а) в комнату
[13:02:08] f[x] дополз до ЭВМ и поздравляет всех с новым годом
[13:31:16] <Kakadu> gds: давай пили примеры парсинга для итератов простенькие. А то я уже готов гуглить на слова iteratee+haskell
[13:32:29] <gds> Kakadu: про потоки прочитал/понял?
[13:32:45] <Kakadu> gds: в твоем мануале? да
[13:36:53] <gds> ну, тогда поехали про собственно итераты писать.  сначала традиционно тупые -- peek, head, stream2list.
[13:37:30] <Kakadu> gds: да, и не забудь написать про минусы итератов для полноты картины ( но это не срочно)
[13:37:42] <gds> а какие там минусы?
[13:37:57] <Kakadu> gds: ты кого спрашиваешь?)
[13:38:19] <gds> да нет там минусов :]
[14:15:03] <gds> дописал про тип итератов, пруфридьте давайте: https://bitbucket.org/gds/ocaml-iteratees-tutorial-rus/src/tip/input.txt#cl-307
[14:22:06] <Kakadu> gds: вроде не плохо
[14:22:53] <Kakadu> вот только мне постоянно приходилось держать в голове, что k это твой недописанный тип продолжения.
[14:23:04] <Kakadu> хотя я не знаю как лучше сделать
[14:30:03] <gds> тоже не знаю, пока будет так.
[15:29:14] <gds> тем, кто прочитал прошлое, можно почитать и следующее: итерат peek: https://bitbucket.org/gds/ocaml-iteratees-tutorial-rus/src/tip/input.txt#cl-444
[15:29:30] <gds> тут уже всё по-серьёзу :)
[15:35:02] <gds> (F5, пофиксил мелочи)
[15:41:37] <gds> Typhon, bobry, уже 629 строк, уже не мелочи, пруфридьте по появлению времени+желания!
[15:49:16] <Kakadu> gds: уже становится немного страшно в ожидании того какой дикий код будет дальше, но ты не думай останавливаться в своей писанине
[15:50:02] <gds> да что там страшного-то.
[15:53:47] <Kakadu> gds: может запланируешь попарсить арифметические выражения итератоами (только с флоатами, чтобы енумераторы себя показали). Вроде просто должно быть.
[15:55:06] <gds> не, парсинг в классическом стиле, приоритеты и прочее, это сложнее.  налепить схему с LL(1) можно, но лень.  в простых случаях итераты не для того.
[16:34:22] Typhon вошёл(а) в комнату
[17:22:35] komar вышел(а) из комнаты
[17:39:52] <gds> следующий кусок, ещё жырнее, про итерат head.  https://bitbucket.org/gds/ocaml-iteratees-tutorial-rus/src/tip/input.txt#cl-637  .  Уже 750 строк.
[18:52:19] letrec вошёл(а) в комнату
[19:21:27] <gds> letrec: если можешь, погляди манул по итератам и укажи кривое/непонятное: https://bitbucket.org/gds/ocaml-iteratees-tutorial-rus/src/tip/input.txt
[19:45:36] letrec вышел(а) из комнаты
[19:50:35] letrec вошёл(а) в комнату
[19:51:11] <letrec> gds: читаю, жесткач попёр, уже надо вдумываться
[19:51:37] <letrec> а есть юнит тесты к твоей реализации?
[19:56:16] <gds> letrec: есть не совсем юнит-тесты, но тесты: https://bitbucket.org/gds/ocaml-iteratees/src/66877bac6e96/tests_common.ml
[20:05:12] <letrec> в общем добавил себе таску в http://www.schemer.com - почитаю вдумчиво как будет достаточный кусок времени
[20:08:20] <letrec> ещё интересна связь итератов с continuations
[20:11:56] <gds> с адскими continuations связи мало.  то есть, конечно, можно, но смысла особо не вижу (может из-за своей ограниченности).  а так -- итераты в случаях, когда мало данных, как раз через "продолжение" говорят, какой кусок кода будет обрабатывать следующий чанк.
[20:51:16] <letrec> f[x]: https://sourceforge.net/tracker/?func=detail&aid=3176319&group_id=40603&atid=428416 - это твой репорт?
[21:15:08] letrec вышел(а) из комнаты
[21:45:17] Typhon вышел(а) из комнаты
[21:45:57] Typhon вошёл(а) в комнату
[21:46:02] Typhon вышел(а) из комнаты
[21:52:00] ftrvxmtrx вышел(а) из комнаты
[22:27:51] ermine вошёл(а) в комнату
[22:40:37] ermine вчера видела три живых и настоящих Kakadu
[22:42:07] <ermine> рказывается, какаду не боится небольшого дубака и сидел на веточке в открытом вольере
[22:49:06] Kakadu в три голоса поет "ку-ка-ре-ку-у-у-у-ууу"
[22:49:48] <gds> Kakadu: не петушись!
[22:51:38] <ermine> а еще в партке птиц по снегу бегали настоящие страусы и кенгуру
[22:52:14] <ermine> парк птиц - это примерно 90 или около того км от москвы
[22:53:02] <ermine> вот страусы впечатляли - крупная тушка на лапках, а голова торчит выше головы любого высокого мужика
[22:57:18] <gds> знакомый алкаш, бывший oracle dba, рассказывал, как за этими страусами следил на местечковой ферме.  он мелкий, ниже 1.8м, и говорит, что пипец, эти пцицэ смотрят сурово и при непонятках сразу клюют в голову.  на несколько дней хватило его.
[23:01:44] <ermine> но было еще шикарно увидеть индюка-самца, который был весь расфуфыренный и с распущенными перьями, жуткое зрелище
[23:02:10] <ermine> хвост - прям как заборчик сзади
[23:02:47] ermine - сугубо городской житель и не знает, какие бывают индюки в деревнях
[23:05:31] <gds> я тоже городской (хотя город в <100тыс.чел. -- хз город ли), но по сёлам покатался, по молдавским, украинским.  круто было.  индюки именно такие, пипец какие гордые внешне.  но удар в щачло с ноги делает их немного скромнее.
[23:08:13] savikov вошёл(а) в комнату
[23:08:47] <ermine> gds: зачем оскорблять их, ведь такие красииивые, когда расфуфыренные!
[23:09:49] <gds> ermine: они представляли опасность, кидались на людей, которые мне небезразличны.
[23:11:26] <savikov> на каких форумах можно про фя поболтать?)
[23:12:02] <gds> savikov: тебе не болтать надо, тебе кодить надо.  бери задачи и вперде.
[23:12:23] <savikov> =_= знаю
[23:13:26] <savikov> и да, я знаю что ты прав =_=
[23:15:00] <gds> не претендую на какую-либо правоту.  изобрази нормально тот пример с "let size lst = ..." хотя бы.  да и вообще, куча дел есть.  вливайся, без "просвещения" не останешься.
[23:15:00] <ermine> про фя надо читать умные книжки
[23:18:24] <savikov> a' list -> int?
[23:18:28] <savikov> те такой?)
[23:19:22] <savikov> недавно ток прочёл как через образец сделать
[23:19:35] <savikov> красиво, но имхо через if больше понравилось
[23:19:37] <savikov> просто же
[23:19:40] <savikov> и коротко
[23:20:47] <savikov> let rec size ls = if ls = [] then 0 else 1 + (size (List.tl ls));;
[23:21:24] <gds> через if в общем случае не добраться до внутряка.  если чисто длину посмотреть -- оно пофиг, а если, например, напечатать все строки, которые в списке?  Придётся разрушать список в значение наподобие
None | Some 'a * 'a list
, чтобы где надо остановиться, где надо напечатать и продолжить.
[23:24:51] <savikov> > оторые в списке
я не дошёл до i/o это ведь по идее вообще функция с побоычным эфектом, я их не понимаю =_=
[23:27:00] <savikov> let rec size ls = match ls with [] -> 0 | _ :: tl -> 1 + (size tl) ;; ну и это няшно
[23:27:56] <gds> во.  как "академический код" -- кошерно.
[23:28:08] <Kakadu> осталось осилить хвостовую рекурсию
[23:28:27] <gds> вот, я же и говорю про академический код.
[23:28:54] <savikov> > осталось осилить хвостовую рекурсию
ват из ит?
[23:28:56] <gds> а про ввод-вывод -- это же камло.  тут можно срать себе в рот отстреленной страуструпом ногой.  
[23:29:33] <gds> про хвостовую рекурсию -- пока до реальных программ не дойдёт, я бы не рассказывал.
[23:29:58] <Kakadu> gds: ну ладно...
[23:34:00] <gds> я только в общих чертах расскажу, без задрочева.
если в общем, то некоторые рекурсивные функции можно записать так, чтобы результатом работы функции был только вызов какой-либо функции (возможно даже себя).  в этом случае компилятор гарантированно не будет кушать стек и будет транслировать вызов в команду безусловного перехода в ассемблере (jmp в x86 например).
а конкретики не будет, пока она точно не нужна.
[23:34:13] <ermine> хвост всегда тормозит
[23:34:27] <ermine> по законам аэродинамики
[23:36:35] <gds> эй да конечьно
[23:36:57] <Kakadu> когдато в фадиез запиливали итераты но потом их удалили в пользу Observable
[23:37:49] <Kakadu> https://github.com/panesofglass/fsharpx/tree/master/src/FSharpx.Observable
[23:38:46] <ermine> Kakadu: щито?
[23:39:29] <ermine> Kakadu: observable - wtf?
[23:40:06] <ermine> точнее, какие же альтернативы у итератов бывают?
[23:40:07] <Kakadu> ermine: мне выкурить тот код
[23:40:24] <Kakadu> это единственное походу что есть про итераты и фадиез
[23:41:20] <ermine> Kakadu: ну итераты можно на любом языке сотворить, даже ручками, там ж концепция нехитрая
[23:41:53] <ermine> но в фишарпе могли мудрить из-за связи с псевдомонадами и хитрой нотацией
[23:42:51] <gds> ermine: ну конечно.  вот как я описал основные принципы по-русски и разжёванным образом, так сразу "концепция нехитрая".  где ж вы все раньше были и чего мне не объяснили в своё время.
[23:45:01] <ermine> gds: ну чтобы осилить итераты как концепцию, мне пришлось выкинуть оттуда мусор в виде монад, который лишь загораживал суть итератов
[23:46:13] <gds> о, ты подставила монаду Identity?  шок!  попёр устоев!
[23:47:03] <ermine> я против извращенцев
[23:48:01] <ermine> идентить - fun x -> x, ну обычная функция, равно как и монада maybe не нужна, просто матчи 'a option и не думай о том, что это монада
[23:48:56] <ermine> и всё будет хорошо, ибо больше нигде ты не сможешь, как в хваскиле, юзать option >>= identity
[23:50:05] <ermine> так-то вот
[23:50:27] <savikov> если кто смотрит вышла 1 серия второго сез Sherlok
[23:50:29] <savikov> http://www.lostfilm.tv/browse.php?cat=130
[23:50:31] <gds> во-первых, можно "option >>= ...", но не нужно.  Во-вторых, я про то, что "выкинуть монады" из итератов -- это то же самое, что подставить туда монаду Identity.
[23:53:00] <ermine> gds: почему?
[23:53:16] <gds> ermine: что "почему?"?
[23:53:59] <ermine> gds: про Identity
[23:55:08] <gds> потому что в монаде Identity в применении к окамлу собственно монады и нет.  значения родные, return = identity, bind = apply, error = raise, catch = комбинация из try-with с говном и палками.  ну вот и "без монад".
[23:56:23] <ermine> ааа
[23:57:01] <ermine> bind кстати тоже бида-бида и печаль
[23:58:13] <ermine> работает только в рамках одного модуля и хочет передавать аргументы второму операнду
[23:58:38] savikov вышел(а) из комнаты: QIP 2010: Спокойное общение
[23:59:13] ermine в текущей версии парсера сделала пока, что никакая функция парсинга не хочет никаких аргументов, кроме строчки инпута
[23:59:22] savikov вошёл(а) в комнату
[23:59:53] <ermine> осталось избавиться от результата типа Parsed | Failed как от тяжкого наследия хаскиля и будет щастье
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!