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

GMT+3
[00:24:10] michael.holub вошёл(а) в комнату
[01:12:40] ygrek вышел(а) из комнаты
[01:32:17] ermine вышел(а) из комнаты
[02:11:40] michael.holub вышел(а) из комнаты
[02:39:55] Typhon вышел(а) из комнаты
[02:58:55] daapp вошёл(а) в комнату
[07:43:45] ermine вошёл(а) в комнату
[07:44:36] ermine вышел(а) из комнаты
[07:45:45] ermine вошёл(а) в комнату
[07:45:50] geovit вошёл(а) в комнату
[07:48:31] <ermine> окошки не восстановились
[07:51:37] sevenov_ изменил(а) имя на sevenov
[09:27:01] sevenov вышел(а) из комнаты: Replaced by new connection
[09:27:04] sevenov вошёл(а) в комнату
[09:37:15] iNode вошёл(а) в комнату
[10:00:12] ygrek вошёл(а) в комнату
[10:00:26] ygrek вышел(а) из комнаты
[10:00:43] ygrek вошёл(а) в комнату
[10:27:45] animist вошёл(а) в комнату
[10:52:27] Typhon вошёл(а) в комнату
[11:22:12] Typhon вышел(а) из комнаты
[11:24:29] Typhon вошёл(а) в комнату
[11:26:20] Typhon вышел(а) из комнаты
[11:28:24] f[x] вошёл(а) в комнату
[11:34:52] Typhon вошёл(а) в комнату
[11:50:22] Typhon вышел(а) из комнаты
[12:01:50] Typhon вошёл(а) в комнату
[12:06:51] daapp вышел(а) из комнаты
[12:12:55] michael.holub вошёл(а) в комнату
[12:13:02] michael.holub вышел(а) из комнаты
[12:44:07] Typhon вышел(а) из комнаты
[12:46:09] Typhon вошёл(а) в комнату
[12:54:07] mildd вошёл(а) в комнату
[12:54:22] mildd вышел(а) из комнаты: I'll be back
[12:55:04] Typhon вышел(а) из комнаты
[13:23:35] michael.holub вошёл(а) в комнату
[14:35:11] gds вышел(а) из комнаты: Replaced by new connection
[14:35:12] gds вошёл(а) в комнату
[15:52:15] ygrek вышел(а) из комнаты
[16:55:25] geovit вышел(а) из комнаты
[16:59:17] iNode вышел(а) из комнаты
[17:18:17] michael.holub вышел(а) из комнаты
[17:20:08] <gds> заставляет подумать над алгоритмом такая штука, как фиксированный (не расширяемый из программы) механизм pattern matching'а. И первое, и второе в глобальной перспективе очень хороши.
Но, всё же, что есть для расширения паттернов и их матчинга изнутри программы?
[17:24:06] f[x] failed to parse at line 0
[17:35:37] <gds> ну, как бы сказать. Есть части программ, над алгоритмами которых не нужно думать. Когда-нибудь понадобится, но здесь и сейчас -- не нужно. Вредно, лишне, заставляет вникать в подробности. Например, будь у меня возможность указать что-то вроде
match (x, (f x)) with ...
так, чтобы выражение (f x) не вычислялось без необходимости, и чтобы не формировать lazy thunk для (fun () -> f x) или использовать lazy pattern patching, но мне бы не пришлось менять алгоритм так, чтобы разделять случаи, требующие и не требующие вычисления (f x).
[17:40:39] Typhon вошёл(а) в комнату
[17:44:14] <gds> иищо про pattern matching. знаете же, "что русскому хорошо, то немцу ой-вэй". в окамле благодаря синтаксическому расширению недавно появились паттерны вида n+k на натуральных числах, а в х-е от них избавляются стандартом от 2010г.
[17:58:46] <f[x]> всё равно не понял чего-ты хочешь
[18:02:13] <Typhon> gds: что за расширение? (это - http://code.google.com/p/ocaml-patterns/ ?)
[18:04:31] <f[x]> и кстати совсем не недавно - это достаточно мохнатые расширения, просто про них никто (из нас?) не знал
[18:12:27] <gds> чего хочу в идеале -- способа указать изнутри программы (compile time вполне ок), как обрабатывать match определённого вида, так, чтобы при необходимости вызывалась функция и всё доводилось до match'а по основным паттернам. Например, чтобы lazy patterns сводились к чему-то вроде: 1. определяем синтаксис (можно тупой) для того, чтобы засовывать значение some_value в match (как-нибудь вида "some_syntax(some_value)"), 2. определяем, что нужно сделать, когда пришёл черёд матчить "some_syntax(some_value)" супротив паттерна -- например, в случае lazy-значений будем матчить (Lazy.force some_value).
В общем случае тут понадобились бы извращения, а в тупом и частном -- всё делается. Можно через lazy, но весьма много этих lazy-значений будет создаваться, поэтому хочу избежать заранее.
[18:13:30] <f[x]> а, кажется понял
[18:13:46] <f[x]> generic расширения заточенное под кастомизацию матчей?
[18:14:18] <f[x]> а MacroParser не подойдёт?
[18:15:29] <f[x]> видимо не подойдёт
[18:15:37] <f[x]> про пункт 2 не очень понятно
[18:16:06] <f[x]> как это будет выглядеть? должен быть какой-то синтаксический указатель
[18:18:12] <f[x]> DEFINE WRAP (x) = lazy x
DEFINE UNWRAP (x) = Lazy.force x
let x = WRAP (2 + 2)
let () = print_endline (match UNWRAP x with
| 4 -> "wow"
| _ -> "oops")
[18:18:14] Kakadu вошёл(а) в комнату
[18:18:16] <gds> сначала надо посмотреть на MacroParser. Не ищется сходу ничего, в том числе при добавлении "ocaml" к запросу. Может и хватит, как его искать?
[18:18:28] <f[x]> я так понимаю хочется не писать UNWRAP?
[18:19:24] <gds> не хочется вызывать создание-вычисление x (пусть и создание lazy (...) выражения). Матчи, считаем, большие и гадкие.
[18:19:35] <f[x]> /camlp4/Camlp4Parsers/Camlp4MacroParser.ml
[18:20:28] <f[x]> я без примера кода не представляю
[18:25:37] <gds> оно и понятно -- вопросы вообще левые какие-то. Проще оказалось поменять алгоритм так, чтобы уложить его в текущие match'и (фактически, сделать ручное предсказание того, когда и какие значения понадобятся).
[18:26:57] <f[x]> а macroparser рекомендую. может избавить от лишнего boilerplate
[18:31:26] <f[x]> http://caml.inria.fr/cgi-bin/viewcvs.cgi/ocaml/version/3.11/camlp4/Camlp4Parsers/Camlp4MacroParser.ml?view=markup
[19:05:09] ygrek вошёл(а) в комнату
[19:27:57] sevenov вышел(а) из комнаты
[19:29:42] sevenov вошёл(а) в комнату
[19:34:02] Typhon вышел(а) из комнаты
[20:23:42] Mon вышел(а) из комнаты
[20:23:51] Mon вошёл(а) в комнату
[20:27:03] f[x] вышел(а) из комнаты
[20:28:49] ermine вышел(а) из комнаты
[20:29:17] Mon вышел(а) из комнаты
[20:29:28] Mon вошёл(а) в комнату
[21:15:46] Kakadu вышел(а) из комнаты
[21:47:22] ExplicitCall вошёл(а) в комнату
[21:54:10] ExplicitCall вышел(а) из комнаты
[22:05:03] sceptic вышел(а) из комнаты
[22:10:11] sceptic вошёл(а) в комнату
[22:53:23] Typhon вошёл(а) в комнату
[23:20:46] aloner2k вышел(а) из комнаты: Replaced by new connection
[23:20:58] aloner2k вошёл(а) в комнату
[23:27:48] sevenov вышел(а) из комнаты
[23:33:45] sevenov вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!