Home
Objective Caml
ocaml@conference.jabber.ru
Пятница, 4 июня 2010< ^ >
ygrek установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | judge by commits, not comments | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:03:07] Kakadu вышел(а) из комнаты
[00:20:56] ermine вышел(а) из комнаты
[00:35:51] iNode вышел(а) из комнаты
[00:37:46] ygrek вошёл(а) в комнату
[00:54:53] gds вышел(а) из комнаты
[01:14:51] <ygrek> jdh зажигает
[01:24:32] ygrek вышел(а) из комнаты
[02:28:49] Typhon вышел(а) из комнаты
[08:15:16] iNode вошёл(а) в комнату
[09:06:53] gds вошёл(а) в комнату
[09:15:27] <gds> ygrek: ХДЕ???
[09:20:03] Kakadu вошёл(а) в комнату
[09:49:28] ermine вошёл(а) в комнату
[10:14:51] Typhon вошёл(а) в комнату
[10:19:37] serp256 вошёл(а) в комнату
[10:22:36] ygrek вошёл(а) в комнату
[10:40:51] ʇsʎɯ вошёл(а) в комнату
[11:20:06] <f[x]> в блоге у себя
[11:20:07] ermine плачет над новой засадой типизации в своем биндинге
[11:24:15] <Typhon> f[x]: можно урлы? )
[11:27:12] <f[x]> http://flyingfrogblog.blogspot.com/2010/05/why-is-haskell-used-so-little-in.html
[11:27:57] <Typhon> спасибо :) хм, я его читаю, а в читалке поста не видел, не порядок (хотя видимо пропустил :) 0
[11:47:56] <ʇsʎɯ> годный вброс, кстати
[11:48:32] <ʇsʎɯ> один фэйл только: переход на личность dons (никогда не получит PhD).
[11:57:31] <gds> почитал, понравилось.
[12:03:16] <komar> Хуита.
[12:10:30] <gds> да ладно, прикольно же.
[12:11:11] <ʇsʎɯ> по делу затроллил хуле
[12:13:52] ygrek вышел(а) из комнаты
[12:19:49] serp256 вышел(а) из комнаты
[12:54:56] serp256 вошёл(а) в комнату
[13:44:49] <gds> есть что-нибудь по continuation-passing style для нубов почитать?
[13:46:06] <vshender> The Scheme Programming Language?
[13:46:15] <vshender> Там что-то было про них в схеме
[13:47:08] <vshender> А вообще: http://library.readscheme.org/page6.html :)
[13:48:08] <gds> о, принято, пошёл читать.
[13:48:45] <vshender> Только ничего _конкретного_ посоветовать не могу, как видишь. Сам особо не разбирался в вопросе.
[13:48:54] <vshender> Но что-нибудь там найдешь точно :)
[13:49:16] Kakadu вышел(а) из комнаты
[13:49:53] <gds> тоже хорошо, вроде есть интересное там.  Но если будут у кого-нибудь ещё идеи, тоже интересно.
[13:59:00] Kakadu вошёл(а) в комнату
[14:03:30] <Typhon> gds: http://palm-mute.livejournal.com/tag/continuations  -- может тут найдется что-нибудь полезное
[14:05:03] <gds> тоже хорошо.
[14:06:59] Kakadu вышел(а) из комнаты
[14:07:05] Kakadu вошёл(а) в комнату
[14:10:06] Kakadu вышел(а) из комнаты
[14:10:34] Kakadu вошёл(а) в комнату
[14:11:35] Kakadu вышел(а) из комнаты
[14:23:12] <gds> ааааа!111  по ссылке на lj\palm-mute нашлось то письмо, которое постоянно хочу найти, когда смотрю на манадки.  http://caml.inria.fr/pub/ml-archives/caml-list/2007/07/9858139a356468fa638746aacf111682.en.html , абзац "This reminds me of a funny event"
[14:27:27] Kakadu вошёл(а) в комнату
[14:29:45] <f[x]> delimcc для парсера. ermine ^^
[14:30:59] iNode вышел(а) из комнаты
[14:35:15] <ermine> только в байткоде
[14:36:00] ermine вставила в external функцию безродную 'b и пошла посмотреть, не упадет ли код
[14:36:17] <vshender> delimcc -- это Олегов проект?
[14:36:37] <ermine> да
[14:36:50] <vshender> ага, точно, только байткод
[14:43:17] <ermine> f[x]: в том парсере есть ненужные откаты, типа если ты парсишь выражение, и какое-то вычисление тебе не нравится, то можно откатить и получить другое выражение на вход
[14:43:40] <ermine> но фича краине интересная
[14:44:43] <ermine> а вообще шаманства со стэком к добру обычно не приводит, если это не язык-специфик
[15:02:48] Kakadu вышел(а) из комнаты
[15:04:20] Mon вышел(а) из комнаты
[15:04:46] Kakadu вошёл(а) в комнату
[15:06:41] Mon вошёл(а) в комнату
[15:28:55] serp256 вышел(а) из комнаты
[15:34:52] Kakadu вышел(а) из комнаты
[15:37:30] Kakadu вошёл(а) в комнату
[15:42:58] ygrek вошёл(а) в комнату
[16:03:43] <Kakadu> 1shrek2001fA3oMPcy
[16:03:54] <Kakadu> извиняюсь
[16:04:15] <Kakadu> не привык к эффектам компиза
[16:06:58] <vshender> тайловые wm без всяких эффектов наше все ;)
[16:07:13] <f[x]> Kakadu: какой ip?
[16:08:09] <Kakadu> блин, когда у меня был инет через VPN я знал что отвечать на этот вопрос. А сейчас с новой системой я хз
[16:09:02] <Kakadu> либо я совсем не понял вопрос
[16:12:44] <gds> пороль есть, логин угадаем, с хостом сложнее.
[16:21:02] <gds> вопрос есть.  Определим список так, как сделано в http://palm-mute.livejournal.com/10896.html :
type 'a partial_list = 'a list -> 'a list
let empty_partial_list = fun x -> x
let append prefix x = fun xs -> prefix (x::xs)
let to_list p = p []
представим, что нужно вернуть только несколько первых элементов недостроенного списка.  Ясно, что любое значение, которое мы передадим в to_list, приведёт к построению полного списка.  Как мне кажется, требуемая функциональность (строить список весь, строить до n-ного элемента) должна быть заложена в том числе в те самые продолжения -- в код "fun xs -> prefix (x::xs)" в данном случае.
Вопросы.  1. правильно ли мне кажется?  2. если нет, то интересны решения.  3. если да, то интересно, как наиболее правильно+красиво реализовать подобный список, чтобы была возможность получить как весь список, так и первые n элементов?
[16:21:02] Kakadu вышел(а) из комнаты
[16:21:59] <gds> реальная проблема сильно сложнее, но хочу понять кое-что из базовых вещей сначала.
[16:26:26] <vshender> Почти половину не понял, но из того что понял видится два способа: либо ленивые списки, либо еще одна to_list-функция, с дополнительным параметром n.
[16:27:00] <vshender> (статью palm_mute не читал, сейчас гляну по диагонали)
[16:29:18] <gds> тут не только в to_list надо n добавлять, а ещё куда-то.  Или нет?
[16:29:30] <ʇsʎɯ> или ~n:n нпример
[16:29:35] <vshender> Ага, но дай чуть подумать.
[16:29:56] <vshender> Но вообще смысл в том, что это не для получения первых n элементов
[16:30:11] <vshender> Это типа способ обхождения неэффективности вставки в конец
[16:30:22] <vshender> Насколько эффективный, сложно судить сходу
[16:30:32] <vshender> То есть используются такие списки, как аккумулятор, как я понял.
[16:30:38] <ʇsʎɯ> да, в конец - не эффективно
[16:31:04] <ʇsʎɯ> лучше в другие места вставлять лол
[16:31:34] <vshender> Вопрос, чем это лучше cons и reverse в конце...
[16:32:20] <gds> да, такой трюк, понятно, только для вставки в конец.  Просто я нашёл, что моя проблема кое-как похожа на задачу обрыва вычисления в нужном месте.  Но вычисления там, блин, зафиксированы в коде append, и без изменения append ничего не поделать.  (имхо даже в случае добавления лени, но не уверен)
[16:32:52] <vshender> В случае добавления лени поделать
[16:33:35] <vshender> Если использовать мой заброшеный lazy_lists, то нужно будет для резальтата to_list вызвать take, передав количетсво нужных элементов
[16:34:19] <vshender> Там же представляются данные по сути так же, только замыкания неявные, и явно они вызываются лишь по требованию
[16:34:36] <gds> то есть, все функции будут брать ленивые списки?
[16:38:28] <vshender> Не совсем понял...
[16:38:48] <vshender> В append будет строиться ленивый список, таким образом он же будет возвращаться в to_list
[16:39:06] <gds> но даже тогда список построится энергично, так как fun xs -> prefix (x::xs) содержит не ленивый вызов функции prefix.
[16:39:07] <vshender> Но в OCaml это точно будет куда менее эффективно, чем cons + reverse
[16:39:38] <vshender> Так суть в том, чтобы строить в append не обычный (с помощью ::), а ленивый (с помощью Lazy_list.cons)
[16:40:13] <vshender> Тогда можно будет легко получать как весь, так и часть списка
[16:40:33] <vshender> Причем повторные получения будут эффективнее, так как результат кэшируется
[16:40:54] <gds> ага, но вызовы функции prefix будут тоже ленивые.  Ведь в окамле для редукции выражения func arg, независимо от ленивости arg, будет вызвана func.
[16:40:56] <vshender> Иначе я не прямо сейчас не вижу явного и простого способа сделать это.
[16:42:00] <vshender> Умлин, ты прав, я лажанул. Тут с ocaml так не прокатит
[16:42:22] <vshender> Вот что заопарк языков в голове делает.
[16:42:26] <vshender> *зоопарк
[16:43:38] <vshender> В общем ИМХО это извратный способ решения задач, которые как мне кажется пытаются этим решить...
[16:46:09] <gds> конечно, partial_list -- извращение редкостное, но у меня там другая штука использует cps, вот и пытаюсь разобраться...
Кстати, очень просто сделать модуль:
type 'a applist
create : unit -> 'a applist
append : 'a applist -> 'a -> unit
get : 'a applist -> 'a list
такой, который обеспечит O(1) этих операций и вообще безопасность.  Конечно, используя Obj.
[16:46:54] <vshender> Просто "Поэтому, если эту операцию требуется делать в цикле, применяются различные трюки - накапливать в обратном порядке, а затем разворачивать, или более элегантно - представлять недостроенные списки в виде функций." -- это так по-хаскеллевски
[16:47:50] <ʇsʎɯ> в ЛNСП тоже так делают, чё
[16:48:09] <vshender> Можно за O(1) сделать амортизационный без всяких Obj
[16:48:35] <vshender> Я имею ввиду вставку в конец
[16:48:54] <gds> а, в частном случае тот же cons+rev даёт O(1).
[16:49:13] <vshender> Ну, в принципе так и есть
[16:49:36] <vshender> Собственно обертку вокруг него я имел ввиду, получается.
[17:10:35] ʇsʎɯ вышел(а) из комнаты
[17:32:43] gds вышел(а) из комнаты
[17:48:59] ygrek вышел(а) из комнаты
[18:06:46] Typhon вышел(а) из комнаты
[18:14:19] gds вошёл(а) в комнату
[18:55:23] Kakadu вошёл(а) в комнату
[19:09:28] ygrek вошёл(а) в комнату
[19:11:54] Kakadu вышел(а) из комнаты
[19:14:15] Kakadu вошёл(а) в комнату
[19:32:48] ygrek вышел(а) из комнаты
[20:31:43] <f[x]> нужен ExtUnix - по аналогии с extlib
[20:32:01] <f[x]> чтобы все эти миллионы разных биндигов раскиданные по разным проектам были в одном месте
[20:37:50] f[x] вышел(а) из комнаты
[21:54:50] <komar> шозачем
[22:48:42] Kakadu вышел(а) из комнаты
[23:02:25] Макей вошёл(а) в комнату
[23:02:33] Макей вышел(а) из комнаты: окуеть жизнь пошла, там выпей, тут выпей. Хоть кто-нибудь бы закусить предложил.
[23:16:59] ygrek вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!