Home
Objective Caml
ocaml@conference.jabber.ru
Суббота, 14 января 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:06:28] <Kakadu> let (>>>) p1 p2 l =
  match p1 l with
  | Failed -> Failed
  | Parsed (_,ll) -> p2 ll
[00:06:49] <Kakadu> а что должен делать комбинатор если в потоке не хватает токенов?
[00:12:02] <Kakadu> Failed наверное.
[00:12:18] <Kakadu> А где это проверять? где-то здесь?
[00:24:20] ftrvxmtrx вошёл(а) в комнату
[00:31:08] <gds> Kakadu: где надо, там и проверяй, чо.  А то, что ты такой >>> взял, это твоё решение ведь.
[00:32:38] <Kakadu> я срисовывал с thedeemon
[00:38:39] <gds> он тебе дал ссылку на fprog, оттуда срисовал?
второй вопрос: у него хватает токенов всегда.  Ты наверное должен был подумать, как жить с нехваткой.  И как?
[00:39:17] <Kakadu> пойду ка я на fparsec смотреть
[00:51:46] f[x] ненавязчиво уполз в assault cube
[00:56:28] gds опять говно.
[00:59:04] <bobry> gds: шо ты?
[00:59:17] <gds> оно.
[00:59:31] <bobry> блин
[00:59:37] <bobry> у всех по два раза сообщения да?
[00:59:46] <gds> ет
[00:59:56] <bobry> фигня какая т
[01:00:06] <Kakadu> bobry: клиент тебя троллит
[01:00:16] <Kakadu> bobry: типа до тебя с 1го раза не доходит)
[01:00:42] <bobry> два клиента (!)
[01:00:48] <bobry> на работе такая ж фигня была
[01:00:52] <bobry> я думал может с адиумом что
[01:10:05] Kakadu вышел(а) из комнаты
[03:37:34] Savik вошёл(а) в комнату
[03:40:33] <Savik> пинг
[04:14:54] f[x] вышел(а) из комнаты: Computer went to sleep
[05:18:01] Typhon вышел(а) из комнаты
[05:25:48] Typhon вошёл(а) в комнату
[05:27:05] Typhon вышел(а) из комнаты
[05:37:15] letrec вошёл(а) в комнату
[06:46:49] Savik вышел(а) из комнаты: Disconnected: connection closed
[06:48:46] ermine вошёл(а) в комнату
[06:59:13] Savik вошёл(а) в комнату
[06:59:26] <Savik> всем доброго :З
[06:59:35] letrec вышел(а) из комнаты
[07:00:02] <Savik> может кто нить объяснить чуть-чуть про unit :З
[07:00:29] <Savik> let moveto p dx dy =
   let () = p.xc <- p.xc +. dx
   in p.yc <- p.yc +. dy ;;
[07:00:55] <Savik> p <- запись { mutable xc : float; mutable yc : float } ;;
[07:05:58] <Savik> Как я понял тут  () это аналогия анонимной фукции. Только анонимная функция как правило передаётся куда-то сразу напрмиер как аргумент для другой функции, а тут () определяется через let и сразу же выполняется, так же наверное можно перечислять их через and тогда получается императивный стиль когда инструкции выполняются последовательно.
[07:06:17] <Savik> Но меня интересует почему возращается unit?
[07:06:22] <Savik> а не поинт
[07:06:34] <Savik> потмоу что использовалась ()?
[07:22:54] letrec вошёл(а) в комнату
[09:10:50] letrec вышел(а) из комнаты
[10:03:03] letrec вошёл(а) в комнату
[10:45:59] komar вышел(а) из комнаты
[10:51:15] bobry вышел(а) из комнаты
[11:16:21] Savik вышел(а) из комнаты: Disconnected: connection closed
[11:18:34] komar вошёл(а) в комнату
[11:48:23] Kakadu вошёл(а) в комнату
[12:17:27] <Kakadu> -let () = printf "slots parsed: %d\n" (List.length funcs)
+let () = print_endline ("slots parsed: " ^ string_of_int (List.length funcs))
[12:17:27] bobry вышел(а) из комнаты
[12:17:41] <Kakadu> есть какой-то смысл вносить такие исправления?
[12:54:23] <gds> Kakadu: в двух случаях есть смысл: 1. кому-то надо flush'ить канал, но он не знает про "%!", зато знает про print_endline, 2. у кого-то статический анализатор кода не поддерживает printf.
[12:55:18] <Kakadu> не то, и не то.
[13:01:22] <gds> остаётся только страх перед printf, бессмысленный и беспощадный.
[13:31:54] letrec вышел(а) из комнаты
[13:50:00] f[x] вошёл(а) в комнату
[14:05:11] <f[x]> нет смысла
[14:05:25] <f[x]> лучше так : смысла нет
[14:10:56] <gds> кстати, мне в мыло весь коммит тот пришёл, видимо я на lablqt "подписан", там ещё ужосы есть.
[14:11:07] <gds> а вот как буду транслировать списки в шелл: http://paste.in.ua/3664/raw/
[14:32:11] <Kakadu> в Питере такй снег красивый
[15:06:50] komar вышел(а) из комнаты
[15:10:12] komar вошёл(а) в комнату
[15:26:58] bobry вошёл(а) в комнату
[15:27:56] <bobry> Kakadu: ага, правда когда он достигает земли вся красота быстро проходит ..
[15:28:00] bobry доплыл от универа до дома
[15:29:14] <bobry> gds: что то в послднем paste ничего не понятно
[15:30:49] <Kakadu> bobry: Ну если по нему шинами не ездить, то всё ОК
[15:31:43] <gds> bobry: кодирование списков как "a\1b\1c", простой append/cons списков, содержащихся в этих строках, распаковка через IFS="\1" и разворачивание шеллом аргумента $@.
[15:40:04] shaggie вошёл(а) в комнату
[15:55:38] ftrvxmtrx вышел(а) из комнаты
[15:56:25] ftrvxmtrx вошёл(а) в комнату
[16:03:23] f[x] вышел(а) из комнаты: Computer went to sleep
[16:21:35] <ermine> блин, ну пчу компьютер такой глупый
[16:21:49] ermine с трудом обучает его читать спецификацию по yaml
[17:14:57] <Kakadu> оффтопик, но забавно. http://habrahabr.ru/blogs/agile/136193/
[17:28:21] <gds> ха, у меня стандартными шелловскими возможностями получается не только cons/append/snoc, но и head/tail/match на списках.  миленько.
[17:30:05] shaggie вышел(а) из комнаты
[17:30:15] <bobry> gds: я пока с трудом понимаю что ты делаешь :)
[17:31:49] <gds> генерацию шелла из камлокода.  вот текущая сигнатура: http://paste.in.ua/3665/
[17:31:54] Typhon вошёл(а) в комнату
[17:33:10] <ermine> блин, глюкавый elinks, криво дампит хтмл в txt
[17:33:38] <bobry> я скорее об отсутствии примеров :)
[17:34:30] <ermine> а нет, не elinks
[17:34:59] <gds> bobry: списки -- последнее, что было нужно.  пример будет.  он будет называться Install.makefile.
[17:36:04] <ermine> так, еще немножко мозгов дадим компу
[17:37:00] <bobry> gds: так уже есть вроде у нас такой -- или ты туда запилить шелл хочешь?
[17:37:11] <bobry> туплю, там будет версия для бандла видимо
[17:37:17] <gds> Так!
[17:37:38] <gds> причём пишу по спекам от f[x], там будет для всех разумных шеллов.
[17:37:39] <bobry> кстати gds, ты чего думаешь oasis-db backend?
[17:37:53] <bobry> раз thelema не хочет барбару и уже скрал все что мог :)
[17:38:04] <gds> а хз что думать.  Можно сделать, конечно.
[17:39:39] <gds> то есть, лично мне пока не надо, но, вообще, реально и даже наверное полезно.
[17:40:12] <bobry> ну, бонус больше затрат на реализацию
[17:42:17] <gds> мне больше полезны были бы "источники пакетов" в виде кусков brb.conf.
[17:42:33] <bobry> инклюды, я помню
[17:42:57] <gds> ага, и provides, либо другой способ отличать возможный источник от требуемого пакета.
[17:43:25] <bobry> может сосредоточимся на хранилищах рецептов?
[17:43:37] <bobry> repository "~/.brb-recipies"
[17:43:49] <bobry> dep "foobar" recipy
[17:44:00] <bobry> опечатался, но мысль ясна
[17:45:00] <gds> отдельную сущность в виде рецептов -- можно, но нужно обеспечить и возможность подключения нескольких рецептов, и перекрытия (так, чтобы какой-то (первый/последний) перекрывал предыдущие указанные источники).
[17:45:34] <gds> но генерилка в шелл мне нужна по-любому, не только для этой задачи.  плюс к тому, сейчас в мозгу, в кеше, хранится куча инфы про шеллы, и будет очень неразумно сбрасывать этот кеш, чтобы потом всё вспоминать.
[17:46:13] <bobry> gds: ну я просто предлагаю делать не include куска brb.conf, а одного рецепта
[17:46:23] <bobry> с подключением известных репозиториев -- вот и все
[17:46:51] <bobry> причем рецепт это просто Dep ...
[17:47:11] <Kakadu> ermine: А когда я пишу комбинаторы юзая какую-нить parsec подобную либу мне надо думать о левой рекурсии и прочем?
[17:47:12] <gds> тогда надо обеспечить то, что я выше написал про перекрытия.  Кроме того, не уверен, что будет слишком удобно в случаях, когда файлы "разнотипные" -- удобнее было бы иметь возможность вклеить (cat 1 2 > 3) рецепты.
[17:47:46] <gds> точнее, cat rec1 rec2 rec3 your-original-brb.conf > new-brb.conf
[17:48:18] <bobry> ну когда надо склеить просто делай cat ага
[17:49:05] <gds> то есть, по сути, будут однотипные конфиги?  но ты предлагаешь "Dep .." в рецептах.  А в текущем конфиге "Dep .." указывает "обязательно скачать и поставить эту либу".
[17:49:49] <bobry> ну ты в рецепте и пишешь откуда качать и как ставить
[17:50:11] <ermine> Kakadu: да, левая рекурсия, лишний бэктрекинг и возможно многоразовое вынимание из инпута и рассматривание элемента (нелинейное время парсинга)
[17:50:15] <bobry> а в brb.conf указываешь что все надо взять из рецепта, ну разве что make targets / configure flags можно заменить или дополнить
[17:50:47] ermine уже сгенерила парсер хмля и теперь трудится над yaml
[17:50:55] <Kakadu> ermine: а переполнения стека означает что я хрень написал (т.е. именно то что ты описала)?
[17:51:01] <bobry> ermine: а зачем тебе столько парсеров?
[17:51:58] <ermine> Kakadu: необдуманная левая рекурсия (не бесконечная, но слишком много вхождений)
[17:52:03] <gds> bobry: сделай так, чтобы рецепты можно было вклеить тупым cat, покажи проект, подумаем.
[17:52:44] <gds> и один из рецептов будет как раз oasis-db, очень даже хорошо впишется в концепцию.
[17:52:53] <gds> конечно, его вклеить нельзя будет, но всё же.
[17:53:11] <ermine> bobry: ну это все форматы, которые я мечтала распарсить, осталось только git добавить и всё, дальше можно будет просто думать над оптимизацией генератора
[17:53:20] <bobry> gds: давай еще раз уточним, есть у меня папка с рецептами ./rcps -- я хочу вклеить оттуда foo и bar -- cat ./rcps/foo ./rcps.bar > brb.conf
[17:53:23] <bobry> ты так хочешь?
[17:53:44] <bobry> без цивилизованного подключения а ля
repo "./rcps"
dep "foo" rcp
dep "bar" rcp
[17:53:50] <ermine> щас у меня markdown, bbcode, abnf, xml/ebnf и abnf/URI, yaml
[17:54:03] <gds> либо так, либо чтобы рецепт содержал кучу пакетов сразу.  Например, чтобы не делать 100 файлов, которые надо будет по одному скачать из интернетов.
[17:54:14] <ermine> каждый новый формат показывал прорехи в текущей реализации
[17:54:51] <ermine> название у проекта годное - комбайн
[17:54:51] <bobry> gds: вот этот вариант мне как раз не нра, я за отдельные рецепты, но cat для них будет работать -- не беспокойся
[17:55:04] <bobry> ermine: звучит клево, опен сорс?
[17:55:24] <bobry> значит ли это что наша вика уже не так далека?
[17:56:04] <ermine> bobry: пока нет, ибо мне стыдно пока показывать gds
[17:56:11] <bobry> <_<
[17:56:24] <gds> я закрою глоза.
[17:56:46] <gds> bobry: это не очень умно, если нужно будет тащить кучу файлов из инета.  Кроме того, если подразумеваешь, что можно будет вклеить рецепты в brb.conf, то почему нельзя / не хочется сделать так, чтобы они сразу были склеенными?
[17:56:57] <ermine> там обещанных итератов нет, одна длинная строчка в памяти
[17:57:21] <ermine> хорошо еще, что спека по yaml влезла - 51kb
[17:57:25] <Kakadu> ermine: а вот так можно писать? https://github.com/Kakadu/Falka/blob/master/Test/Test.fs#L52
[17:58:13] <bobry> gds: "тащить" будем через git / hg ;)
[17:58:53] <gds> нафига усложнять жизнь?  проще -- тупо wget http://.../recipes.
[17:59:13] <bobry> ну можно и так
[17:59:23] <bobry> просто склеивание рецептов смердит духом мейкфайлов
[18:00:29] <bobry> которые рано или поздно превращаются в неподдерживаемые и нечитаемые куски гм, как бы по приличней
[18:00:34] <bobry> зачем закладывать такое в дизайн
[18:00:53] <ermine> Kakadu: ну если мини-тестик, то еще можно, возьми ты вот какую-нить спеку и напиши сначала парсер, который будет читать спеку (там непонятно что есть определение, а что есть текст), который потом родит парсер собственно для парсинга данных :)
[18:04:01] <ermine> Kakadu: обычный парсер комбинаторами для bnf грамматики - порядка 300-500 строк кода
[18:04:27] <Kakadu> ermine: мне интересно почему stack overflow при парсинге "1+2+3+4"
[18:04:37] <ermine> вместе с семантикой
[18:04:56] <Kakadu> надо вначале чтонить простое попарсить
[18:05:36] <ermine> ye 1+2+3 можно и через ocamlyacc легко парсить, такое у меня в боте уже есть
[18:06:13] <ermine> там кноме арифметики есть все камлевые математические функции и факториалы
[18:06:19] ftrvxmtrx вышел(а) из комнаты
[18:06:21] <gds> bobry: ну, я не эстет, я за удобные и гибкие решения.  иметь на хосте git/hg для доставания рецептов -- не гибко.
далее, надо разделять рецепты и явные зависимости.
[18:06:59] <bobry> gds: ок, rcp.tar -- гибко?
[18:07:11] <bobry> пусть он склеивает :)
[18:07:21] <gds> если на системе есть tar -- да.  а если нет -- не гибко.
[18:07:34] <bobry> tar даже в debian mini есть
[18:09:18] <ermine> Kakadu: ты видел спирит из буста?
[18:09:39] <ermine> там вроде как тоже ручной изврат с комбинаторами
[18:09:43] <ermine> на с++
[18:09:58] <Kakadu> ermine: только слышал
[18:10:07] <gds> в вендах каких -- не факт, что tar есть.
[18:10:25] ftrvxmtrx вошёл(а) в комнату
[18:10:54] <bobry> кто пользуется камло под виндами?
[18:11:03] <ermine> в вендах самый правильный архиватор - winrar, как меня убеждали
[18:12:15] <gds> bobry: я пользуюсь
[18:12:30] <bobry> :(
[18:12:37] <bobry> добровольно?
[18:13:03] <ermine> bobry: запрети ему!!!
[18:13:38] <ermine> меня еще убеждали, что венда - самый правильный енвиронмент для разработки
[18:13:59] <bobry> ermine: кто эти люди?
[18:14:13] <ermine> а под линуксом нет кнопочек на экране
[18:14:37] <ermine> bobry: виндузятники-программисты с большой зарплатой
[18:15:01] <gds> венду -- добровольно использую, когда хочу выдать кому-нибудь .exe.
[18:16:16] <ermine> gds: вирус не забываешь вкладывать в .exe?
[18:21:16] <bobry> gds: давай я пока не разрешу их склеивать, и если необходимость станет очевидно -- запилим потом
[18:21:28] <bobry> ermine: вирус сам себя вложит, зачем gdsу о них помнить
[18:22:25] <gds> bobry: твоё дело.  если будет надо -- буду использовать предыдущие версии или запилю форк.
[18:24:56] <bobry> gds: и почему все наши споры так кончаются :)
[18:25:00] <bobry> мне такой расклад не нра
[18:26:19] <gds> у тебя -- желание сделать всё гламурно, у меня -- максимально тупо и более-менее гибко.  кроме того, накладываются разные убеждения, разный опыт, разные предпочтения.
[18:27:44] <gds> например, с конфигом: хочу "однотипный" конфиг, который можно склеивать в разных сочетаниях, тупо текстовым редактором или cat.  это -- тупо и гибко.
[18:28:28] <bobry> в каком месте то что я озвучил конфликтует с "однотипным" конфигом?
[18:28:30] <gds> следовательно, в этом конфиге надо как-то отличать "ставить этот пакет из этого источника" vs "вот источник, на случай, если надо будет поставить пакет".
[18:29:41] <bobry> что от чего отличать? что-то я н понимаю
[18:29:41] <gds> конфликтует тем, что не хочешь давать возможность склеивать рецепты.
[18:31:15] <bobry> но это ведь одна строчка в коде фактически
[18:31:17] <gds> отличать -- ровно то, что я описал выше.  Бывают требования "явно поставить пакет из указанного источника" (v1 "dep ...").  Если добавлять рецепты, и если они будут однотипные (взаимно и с конфигом), и если можно будет их склеивать, они должны нести другое содержимое, не "dep".
[18:31:22] <bobry> то что я предлагаю -- "программа минимум"
[18:32:48] <bobry> почему они не могу нести dep?
[18:35:56] <gds> потому что это, если в терминах первой версии, означает "скачать, скомпилировать и локально поставить этот пакет".  очевидно, если конфиги однотипные, и один конфиг содержит кучу dep, они все будут ставиться, даже если они не нужны.
[18:38:00] <bobry> так, я понял что ты хочшь
[18:38:06] <bobry> ты хочешь инлайнить рецепты в конфиг
[18:38:11] <bobry> так чтобы они там были, но не ставились ..
[18:38:26] <gds> иметь такую возможность -- было бы гибко.
[18:38:40] <bobry> зачем тебе там такие пассивные рецепты?
[18:38:45] <bobry> учитывая что у нас нет условных операторов
[18:42:45] <gds> затем, чтобы файл был однотипным и можно было бы использовать простой текстовый редактор, редактируя один файл, для того, чтобы позволить себе сделать всё, что нужно для проекта или группы проектов.
то есть, можно ввести отдельно "источник вот, если понадобится" и "ставить обязательно оттуда" на уровне ключевых слов.
можно сделать и как-то наподобие "файл, в котором dep'ы указывают на то, откуда ставить какие пакеты в случае, если они понадобятся".  но тогда некоторые файлы можно будет склеивать, некоторые нет.
[18:43:17] <ermine> о, можно взять язык sieve, там все операторы есть
[18:43:49] <bobry> окей, еще разок -- в чем именно проблема с отдельными рецептами? даже если мы вводим ключевые слова, рецепты должны лежать отдельно
[18:43:58] <bobry> кроме "заколебешься выкачивать"
[18:44:07] <bobry> ./_recipies -- дефолтный репозиторий например
[18:44:12] <bobry> который подключается автоматом
[18:44:16] <bobry> клади туда и все
[18:56:09] <gds> оперировать директориями, а не файлами, не очень хорошо, так как нет известной реализации для действия "выкачать директорию по урлу", но есть "выкачать файл по урлу".
[18:57:34] <bobry> wget -r?
[18:57:53] <gds> нет, так как веб-сервер не обязан предоставлять страницу со всеми ссылками на файлы.
[18:58:58] ygrek вошёл(а) в комнату
[19:13:47] letrec вошёл(а) в комнату
[19:21:37] <gds> интересно, как живут без existential types в случае, когда реализуют let-привязки.  "let ident = expr1 in expr2".  если изобразить в виде куска ast, будет "Let ident expr1 expr2", конструктор будет "type expr 'a = [ ... | Let of var 'b and expr 'b and expr 'a ]".
[20:39:06] Typhon вышел(а) из комнаты
[20:39:42] <ermine> блин, какой сложный текст спеки
[20:39:54] <ermine> точнее, bnf - полное г-но
[20:46:00] <ermine> таки придется руками корчевать
[21:46:06] ftrvxmtrx вышел(а) из комнаты
[21:52:39] letrec вышел(а) из комнаты
[21:55:59] <gds> # type 'a t = [ `Seq of (unit t * unit t) ];;
Error: In the definition of t, type unit t should be 'a t
wtf???
[21:57:11] <gds> тогда как "type 'a t = Seq of unit t * unit t;;" канает.
[21:57:56] ftrvxmtrx вошёл(а) в комнату
[22:02:20] <gds> ну ну, нагуглил.  но что забавно, в сообщении от 2006г текст " What you need here is GADTs [...], and a work in progress for ocaml."
[22:03:09] <Kakadu> ну вот, за 5 лет запилили
[22:03:25] <gds> ай молодцы.
[22:11:12] komar вышел(а) из комнаты
[22:11:18] komar вошёл(а) в комнату
[22:11:50] <gds> впрочем, гадты в игрушечном примере помогают.
type t 'a =
  [= `Nop of eq 'a unit
  |  `U of (t 'a * eq 'a unit)
  ...
value nop : t unit = `Nop (refl ());
value mku tunit : t _ = `U (tunit, refl ());
value rec dump : t 'a -> string = fun
  [ `Nop _ -> "nop"
  | `U (tunit, eq) -> "U " ^ dump tunit
  ];
но не знаю, нужны ли они в целом.  В игрушечных примерах достаточно только ограничить сигнатуры.
[22:12:37] <gds> не, какая-то бредятина в целом.
[22:16:15] <gds> и начинается она на конструкторе
type t 'a = ... | `Print of t (list (t string))
и хз, как тут всё оформить, учитывая, что, с одной стороны, таковой t 'a имеет тип t unit, но аргумент должен иметь более сложный тип.
[22:16:20] <Kakadu> блин, gadtы это что-то хитрое...
[22:19:04] <ermine> и хаскильное
[22:19:14] ermine начала ненавидеть yaml
[22:19:36] <ermine> там бнф - не совсем бнф
[22:23:24] <Kakadu> интересно, почему
this.number <|> (this.number >>. this.op >>. expr)
парсит норм 1+2+3, а
(this.number >>. this.op >>. expr) <|> this.number
не парсит, говоря что хочу операцию
[22:26:30] <ermine> ну и нечитабельная каша
[22:26:35] <ermine> чо ты нопесал?
[22:27:30] <Kakadu> почему от перестановки местами у <|> всё ломается?
[22:28:10] <ermine> это или?
[22:28:19] <Kakadu> угу
[22:28:27] <Kakadu> хмм
[22:28:33] <Kakadu> а если нет?....
[22:28:40] <ermine> ну упорядоченные варианты наверное, как в пеге
[22:29:48] <ermine> они в комбинаторах кстати ломают линейность парсинга
[22:30:43] <Kakadu> не, это реально ИЛИ
[22:31:08] <ermine> приоритетные
[22:31:26] <ermine> сначала то, что с высшим приоритетом
[22:31:43] <Kakadu> нет там никакого приоритета
[22:31:45] <Kakadu> https://bitbucket.org/fparsec/main/src/a7df4d71f533/FParsec/Primitives.fs#cl-266
[22:32:31] <ermine> святой дух там?
[22:32:54] ermine лень смотреть
[22:33:36] <Kakadu> let (<|>) (p1: Parser<'a,'u>) (p2: Parser<'a,'u>) : Parser<'a,'u> =
    fun stream ->
        let mutable stateTag = stream.StateTag
        let mutable reply = p1 stream
        if reply.Status = Error && stateTag = stream.StateTag then
            let error = reply.Error
            reply <- p2 stream
            if stateTag = stream.StateTag then
                reply.Error <- mergeErrors reply.Error error
        reply
[22:33:49] <Kakadu> Это честный ИЛИ
[22:33:57] <Kakadu> если не первое, то второе
[22:35:51] <ermine> Kakadu: т.е. пробуем p1 p2 в любом порядке, надеясь на удачу?
[22:36:03] <Kakadu> вначале первый
[22:36:26] <ermine> ну вот, у p1 приоритет выше
[22:37:19] <ermine> поэтому если надо взять из строки два пробела или один пробел, надо "  " <|> " " и наверное не наоборот, ибо тогда всегда сработает не тот вариант
[22:38:00] <Kakadu> как интересно
[22:38:04] <ermine> так же левой ногой в комбинаторах делают с арифметикой, когда хотят сначала умножение, а потом сложение
[22:39:21] <ermine> Kakadu: читай вумные книжки, они рулез, особенно на ночь
[22:43:05] <ermine> Kakadu: и вообще чего ты прицепился к комбинаторам?
[22:43:31] <Kakadu> диплом
[22:46:02] <ermine> Kakadu: а как тема называется?
[22:46:43] <Kakadu> да черт с ней темой
[22:46:56] <Kakadu> надо взять код на комбинататрах
[22:47:18] <Kakadu> и чтобы человек сказал "сделай эту функцию не комбинатором, а LALR"
[22:47:32] <ermine> тема не раскрыта
[22:48:06] <Kakadu> Ну и подменить код, где кусок будет на комбинаторах, а кусок обычным разбором.
[22:48:41] <Kakadu> Типа человек решил что эту подграмматику парсить комбинаторами не годится, и запускает чтонить дикое
[22:48:59] <ermine> комбинаторы в lalr? хмм
[22:49:28] <ermine> не понимаю
[22:50:05] <Kakadu> типа чтобы окаты побороть
[22:52:44] <ermine> чтобы обрывать, надо в любом нетерминале или выдавать успешный результат, или бросать ошибку и отказываться бороться дальше (за исключением первого нетерминала бранча альтернативы)
[22:53:55] <Kakadu> я не понял
[22:54:30] <ermine> Kakadu: что такое lalr?
[22:55:10] <Kakadu> ну LR с заглядыванием вперед
[22:56:02] <ermine> а чем lr отличается от ll?
[22:57:00] <Kakadu> ll это topdown
[22:57:44] <ermine> ну это наверное был звон от меня
[22:57:56] <Kakadu> LL это рекурсивный спуск
[22:58:09] <Kakadu> все комбинатор вроде это LL
[22:58:15] <Kakadu>
[23:00:53] <ermine> ну если все они ll, то как же быть с lalr?
[23:04:07] <Kakadu> в смысле как же быть?
[23:07:20] shaggie вошёл(а) в комнату
[23:20:59] Typhon вошёл(а) в комнату
[23:32:08] Typhon вышел(а) из комнаты: Replaced by new connection
[23:32:28] Typhon вошёл(а) в комнату
[23:40:13] ermine вышел(а) из комнаты
[23:45:22] Typhon вышел(а) из комнаты
[23:50:40] Typhon вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!