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

GMT+3
[00:13:17] sevenov вошёл(а) в комнату
[00:16:50] ygrek вышел(а) из комнаты
[02:39:20] sevenov вышел(а) из комнаты
[03:07:55] sevenov вошёл(а) в комнату
[07:36:19] animist вышел(а) из комнаты
[07:38:27] animist вошёл(а) в комнату
[08:23:45] gds вышел(а) из комнаты
[08:55:03] gds вошёл(а) в комнату
[09:09:33] sceptic вошёл(а) в комнату
[09:16:35] Typhon вошёл(а) в комнату
[10:42:46] sceptic вышел(а) из комнаты: Replaced by new connection
[10:42:51] sceptic вошёл(а) в комнату
[10:48:16] f[x] вошёл(а) в комнату
[10:50:44] Mon вошёл(а) в комнату
[10:51:21] Mon вышел(а) из комнаты
[10:52:31] Mon вошёл(а) в комнату
[12:18:48] Typhon вышел(а) из комнаты: Replaced by new connection
[12:35:32] Typhon вошёл(а) в комнату
[12:54:29] Mon вышел(а) из комнаты
[12:56:21] Typhon вышел(а) из комнаты: Replaced by new connection
[12:56:22] Typhon вошёл(а) в комнату
[13:36:07] Mon вошёл(а) в комнату
[13:39:02] Mon вышел(а) из комнаты
[17:20:22] <sceptic> чего-то я не вкурю:
let rec subseq = function
| [] -> [""]
| head::tail -> (subseq tail) :: [head]
;;
Error: This expression has type string list
but an expression was expected of type string
Указывает на (subseq tail).
[17:21:25] <gds> head : string
[head] : string list
x :: (_ : string list) -> x : string
[17:22:14] <gds> [head] : string list из-за того, что возвращается [""] : string list в первой ветке.
[17:22:54] <sceptic> дык и должен быть string list
[17:24:16] <gds> к списку с типом string list можно доклеить в качестве головы только string
[17:30:44] gds вышел(а) из комнаты
[18:01:17] gds вошёл(а) в комнату
[18:05:52] f[x] вышел(а) из комнаты
[18:42:08] sevenov вышел(а) из комнаты
[18:57:00] <sceptic> А как по профайлить работу одной функции?
[19:05:31] sceptic вышел(а) из комнаты
[19:12:47] Mon вошёл(а) в комнату
[19:20:05] sceptic вошёл(а) в комнату
[19:25:20] Mon вышел(а) из комнаты
[19:26:06] Mon вошёл(а) в комнату
[20:10:28] animist вышел(а) из комнаты
[20:10:46] animist вошёл(а) в комнату
[20:10:47] Mon вышел(а) из комнаты
[20:11:14] Mon вошёл(а) в комнату
[20:36:31] ygrek вошёл(а) в комнату
[20:46:43] animist вышел(а) из комнаты
[20:47:00] animist вошёл(а) в комнату
[21:06:13] Mon вышел(а) из комнаты
[21:06:25] Mon вошёл(а) в комнату
[21:29:23] Typhon вышел(а) из комнаты
[22:38:05] Typhon вошёл(а) в комнату
[23:00:49] <gds> Typhon: ну ты задал задачку про отрывание гуя от оверблд :) Вроде всё просто, а посидеть над этим надо не десять минут. Хотя, рано или поздно, подобная необходимость возникла бы.
[23:02:44] <ermine> gds: новый сервер стоит на месте и готов к экспериментам с ocsigen
[23:02:44] <Typhon> :)
[23:04:06] <gds> ermine: страшно! тем более, в ocaml-beginners недавно видел примеры кода, генерящего хтмл статически. make me unseen it!11111
[23:05:42] <ermine> gds: давай еще раз поищем хтмл в твоем любимом мойнмойне?
[23:06:04] <ermine> кстати, чота давно я туда не гадила
[23:06:30] <ermine> ну ничо, убью еще один висяк и будет время
[23:07:20] sceptic вышел(а) из комнаты
[23:07:21] <gds> ermine: в моём любимом мойне? во тебя прёт :)
[23:08:26] ermine зевает
[23:08:55] <ermine> а еще есть интересное занятие - читать гаррипоттера в оригинале
[23:09:25] <gds> меня в своё время хватило на полторы книги.
[23:10:03] sceptic вошёл(а) в комнату
[23:10:07] <ermine> я пока только две главы прочла
[23:11:57] <sceptic> А камло не умеет хвостовую рекурсию разворачивать? http://codepad.org/PYsMu3x8
[23:12:54] <gds> умеет, только её тут нет.
[23:12:59] <ermine> что б значило слово "разворачивать"
[23:13:28] <sceptic> хм.. А как тогда правильно сделать?
[23:13:53] <sceptic> у меня на нужных значениях stack overflow..
[23:14:28] <ermine> на 8k итерациях?
[23:14:44] <ermine> ну наверное не хвостато получилось
[23:14:50] <sceptic> на входном списке из 30 элементов
[23:15:03] ermine в код не смотрела
[23:15:04] <gds> замечу, что код будет работать только на игрушечных списках.
[23:15:17] <sceptic> вот вот...
[23:15:35] <sceptic> мне минимум 30 надо, а желательно для 500.
[23:15:49] <gds> ну и зачем его писать, стало быть? :) что сделать-то надо -- неужели создать в памяти 2^500 списков?
[23:16:00] <sceptic> но это влобовое решение, мне оно нужно для правильных ответов.
[23:16:55] <sceptic> это не так много, хасцкель на падает вот...
[23:17:41] <ermine> gds: ты лучше рмсскажи мне как сделать Hashtbl так - чтобы в нём можно было искать по ключу как в обычном hashtbl, но можно было бы еще выбрать элемент ниже/выше выбранного скажем на 2 позиции, как это делается при поиске вручную в array
[23:18:24] <ermine> gds: более конкретный пример: словарь Мюллера индексируется в two-letters+pos
[23:18:52] <gds> sceptic: падучесть -- размер стека можно увеличить.
[23:19:22] <sceptic> ладно, буду думать над оптимальным решением
[23:19:26] <gds> ermine: не делается на hashtbl такое, по крайней мере прямым образом.
[23:19:29] <ermine> втупую нужные слова в словаре находятся по хэшу в две буквы, но если слово - это "a " (с пробелом), то надо выбрать ключ "повыше"
[23:20:04] <ermine> gds: а мне чота претит идея тупо использовать только array :-)
[23:20:46] <ermine> c хэшем все ж быстрее чем спускаться по массиву сверху вниз
[23:21:29] ermine расстроилась и пошла восвояси
[23:21:42] <ygrek> проиндексируй отдельно по однобуквенным
[23:22:29] <ermine> к словарю мюллера сам хэш индексов тоже прилагается
[23:22:38] <ermine> ну можно вручную проиндексировать, да
[23:23:03] <ermine> только хз как вычислять позиции для lseek
[23:23:29] <gds> sceptic: порядок соединения подстрок и порядок результатов важны? если нет, то можно сообразить что-нибудь?
[23:23:48] <gds> (точнее, последнее было не вопросом)
[23:24:01] <gds> ermine: можно взять похитрее структуру данных, только зачем.
[23:24:29] <sceptic> gds: порядок не важен.
[23:25:21] <ermine> gds: ну я не знаю как вычислять позиции для Unix.lseek, а держать весь словарь в памяти, хмм
[23:26:09] <ermine> 6 метров - вроде бы и немного
[23:29:20] <gds> ermine: поддерживаю вариант ручного индексирования, если уж на то пошло.
[23:29:56] <gds> sceptic: тогда можно ввести кумулятыр, для каждого элемента списка углубляться в рекурсию, а при выходе из рекурсии возвращать результат какой-нибудь list_rev_map_append (fun x -> h ^ x) acc acc, где list_rev_map_append f a b будет хвосторекурсивно мапить элементы из a функцией f и дописывать в бошку списка b.
уже почти сплю, так что ошибки вероятны.
[23:30:36] <ygrek> ermine: кстати почему тебе array не подходит?
[23:30:42] <sceptic> ладно, утро вечера мудренее, к тому же я болею, бошка раскалывается.
[23:30:49] <ermine> gds: так ручное индексирование влечет к тому, чтобы держать весь словарь в памяти
[23:31:01] <ygrek> сколько там пустых мест получится на двойках?
[23:31:02] <gds> ну или комбинацию хвосторекурсивных List.rev_map + List.rev_append.
[23:31:07] <ygrek> экономишь на спичках?
[23:31:31] <ygrek> ещё не факт что хэштаблица экономненй
[23:32:01] <ygrek> можно splay-list попробовать
[23:32:22] <gds> кстати да, по памяти хеш скорее жырнее таблицы, хотя смотря как организовать.
[23:32:22] <ermine> ygrek: нет пустых мест
[23:32:37] <ermine> если это ты мне
[23:32:52] ermine пойдет полежит до утра немного
[23:33:56] <ygrek> как это нет пустых мест? а "ыы"?
[23:35:50] <ermine> ygrek: все статьи там - однострочные (с одним \n), индекс указывает на то, где кончается блок (кусок) файла перед следующим индексом, индекс указывает на позицию в файле, на которую надо устанавливаться при помощи lseek и потом в цикле выискивать нужнуж строку внутри блока
[23:36:18] <ermine> а пустые места были бы, если бы индекс указывал на начало блока, видимо
[23:36:26] <ygrek> вообщем варианты:
- массив индексированный двойками с дырками
- splay-list
- list/array двоек индексированный хэштаблицей
[23:36:37] ygrek ничего не понял и уполз спать
[23:37:49] <ermine> ну
bank
book
but а в индекс попало только bo, указывающий на начало строки следующего индекса, скажем bu

[23:38:13] <ermine> не обязательно всевозможные две пары букв держать
[23:38:21] ermine тоже уползла
[23:39:34] <ermine> хотя нет, вру
[23:39:50] <ermine> в базе содержатся все две буквы, которые есть в словаре
[23:40:16] <ermine> если нету слова с az, то и нету в хэше, ибо нефиг
[23:41:21] <gds> интересно, как у sqlite с индексированием? ну или dbm взять, если нужен только lookup.
[23:42:15] <ermine> в dbm только два поля
[23:42:30] <gds> зачастую их хватает.
[23:42:36] <ermine> а первоначально бредогенератор сульци пытались в dbm запихнуть
[23:43:03] <gds> бредогенератор -- не словарь, однако.
[23:43:50] <ermine> gds: ну.. словари ставятся из пакетных менеджеров ваших любимых операционок
[23:45:25] <gds> это не мешает совершить над ним страшное перед его использованием.
[23:46:07] <ermine> а смысл?
[23:46:16] <ermine> можно совершить, загружая в память
[23:47:37] <ermine> ладно
[23:48:01] <gds> это да. в одну строку его зафигачить даже можно, если 6мб. и сотню индексов туда, например. или тупо массив из смещений.
[23:49:09] <ermine> да можно объединить с индексом
[23:49:25] <ermine> какое-нить дерево
[23:53:31] <Typhon> gds, " (конечно, не тех, которые в хаскеле, так как там какое-то извращение сего понятия.)" травите потихоньку? :-)
[23:54:55] <ygrek> урлы урлы
[23:55:04] <Typhon> http://wizzard0.livejournal.com/86142.html
[23:55:11] <Typhon> АТД
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!