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

GMT+3
[00:08:30] <Kakadu> let rec cortes a b =
match a with
| [] -> []
| h::tl -> List.append (List.map (fun x -> h::x) b) (cortes tl b);;
(*ща буду думать как переписать это хвостато рекурсивно*)
[00:10:04] <sceptic> А на мой взгляд очень даже хвостовато.. или я не докуриваю.
[00:10:50] <gds> List.append не хвостовой вызов
[00:11:23] <gds> переписать-то можно, но нужно ли.
[00:11:28] <Kakadu> ДАА
[00:11:36] <Kakadu> Stack overflow
[00:12:00] <gds> во! тогда вопрос: а чего это так много хранится в списках?
[00:12:34] <Kakadu> не понял: что хранится или почему в списках?
[00:13:24] <Kakadu> в списках потому что я думал что списки это круто когда писал
[00:13:35] <Kakadu> у меня просто тупой алгорифм
[00:13:43] <gds> вник в алгоритм плотнее. Вопрос другой: зачем нужно создавать список всего этого счастья.
Ответ вижу :)
[00:14:21] <gds> список это всего лишь список -- структура в памяти, все дела. Можно увеличить стек, кстати.
[00:14:31] <gds> и список это не круто.
[00:15:46] <Kakadu> есть сложное решение: генерить цели моей функции как-то по-ленивому
[00:16:32] <gds> можно и по-энергичному, взять Stream в дело.
[00:18:38] <gds> то есть, как отправную точку, написать функцию с типом
stream_product : 'a Stream.t -> 'b Stream.t -> ('a * 'b) Stream.t
(если не ошибся с original syntax)
[00:18:59] <Kakadu> а в чем будет фокус?
[00:19:19] <gds> или даже лучше, один (а ещё лучше -- оба) из входных аргументов сделать списками.
[00:19:49] <gds> фокус в том, что не потребуется создавать список, содержащий (List.length a) * (List.length b) значений.
[00:20:13] <Kakadu> а будет стрим вместо этого списка?
[00:20:42] <gds> да, который будет в себе хранить обе копии списков и итерировать по ним, выдавая туплы.
[00:23:01] <gds> но это в том случае, когда нужно значение, которое является как бы итератором (через которое можно узнать следующее значение последовательности, например). Если же не нужно это, можно просто инвертировать управление, и вместо итерации по значению оформить функцию, итерирующую согласно двум спискам-аргументам. Как вариант, какое-нибудь List.iter2.
[00:23:51] <gds> чорт, List.iter2 это не то,
[00:24:07] <gds> ну, аналог пишется. главное, чтобы была возможность его использовать.
[00:24:44] <Kakadu> звучит весьма страшно)
[00:24:51] <Kakadu> сейчас попытаюсь вникнуть
[00:32:00] <gds> в среднем случае часть выполнения программы можно закодировать как через код, так и через данные. Например, цикл можно представить как "foreach my $item (@the_list) { if (cond($item) { process($item) } }", а можно как "List.iter process (List.filter cond the_list)". То есть, фильтруем или в коде, или в данных. Таким же образом и более сложные вещи можно кидать как в данные, так и в код.
ё...ый стыд, но я порядка недели (неспешного дела, по полчаса в будние, к счастью) потратил на то, что пытался запихнуть в код то, что следовало запихнуть в данные.
[00:33:17] gds покидает чятик примерно на 9 часов
[01:03:56] ermine вышел(а) из комнаты
[01:36:15] Kakadu вышел(а) из комнаты
[02:24:38] michael.holub вошёл(а) в комнату
[02:24:47] michael.holub вышел(а) из комнаты
[02:44:00] daapp вышел(а) из комнаты
[03:57:40] daapp вошёл(а) в комнату
[04:33:25] stream вошёл(а) в комнату
[04:36:45] stream вышел(а) из комнаты: qutIM : Jabber plugin
[07:50:15] iNode вошёл(а) в комнату
[08:11:52] geovit вошёл(а) в комнату
[08:22:45] gds вышел(а) из комнаты
[08:35:58] ExplicitCall вышел(а) из комнаты
[08:44:13] Kakadu вошёл(а) в комнату
[08:55:46] gds вошёл(а) в комнату
[08:57:24] Kakadu вышел(а) из комнаты
[09:12:59] geovit вышел(а) из комнаты
[09:13:37] geovit вошёл(а) в комнату
[09:45:27] sceptic вышел(а) из комнаты
[09:56:49] sceptic вошёл(а) в комнату
[10:00:13] sceptic вышел(а) из комнаты
[10:00:38] sceptic вошёл(а) в комнату
[10:40:18] aloner2k вошёл(а) в комнату
[11:01:51] aloner2k вышел(а) из комнаты
[11:10:00] geovit вышел(а) из комнаты
[11:11:23] aloner2k вошёл(а) в комнату
[11:14:07] michael.holub вошёл(а) в комнату
[11:14:13] michael.holub вышел(а) из комнаты
[11:18:15] sceptic вышел(а) из комнаты
[11:18:29] sceptic вошёл(а) в комнату
[11:30:34] ermine вошёл(а) в комнату
[12:22:02] animist вошёл(а) в комнату
[12:45:18] Typhon вошёл(а) в комнату
[13:00:53] hovertus вошёл(а) в комнату
[13:02:23] hovertus вышел(а) из комнаты
[13:28:31] daapp вышел(а) из комнаты
[13:58:13] daapp вошёл(а) в комнату
[13:59:07] michael.holub вошёл(а) в комнату
[14:17:08] michael.holub вышел(а) из комнаты
[14:25:18] Typhon вышел(а) из комнаты
[14:30:31] ExplicitCall вошёл(а) в комнату
[14:54:12] Typhon вошёл(а) в комнату
[15:14:42] Typhon вышел(а) из комнаты
[16:02:51] Mon вышел(а) из комнаты
[16:03:02] Mon вошёл(а) в комнату
[16:52:53] Typhon вошёл(а) в комнату
[16:59:23] Typhon вышел(а) из комнаты
[17:00:31] Typhon вошёл(а) в комнату
[17:11:31] Typhon вышел(а) из комнаты
[17:11:42] Typhon вошёл(а) в комнату
[17:31:13] gds вышел(а) из комнаты
[17:47:42] Typhon вышел(а) из комнаты
[18:00:11] Typhon вошёл(а) в комнату
[18:00:12] sevenov вышел(а) из комнаты
[18:07:29] sevenov вошёл(а) в комнату
[18:12:21] gds вошёл(а) в комнату
[18:26:36] daapp вышел(а) из комнаты
[18:27:00] iNode вышел(а) из комнаты
[18:45:12] Typhon вышел(а) из комнаты
[18:46:07] Typhon вошёл(а) в комнату
[18:50:21] Mon вышел(а) из комнаты
[18:50:32] Mon вошёл(а) в комнату
[18:51:50] Mon вышел(а) из комнаты
[18:51:55] Mon вошёл(а) в комнату
[18:52:30] Mon вышел(а) из комнаты
[18:52:42] Mon вошёл(а) в комнату
[18:52:52] Mon вышел(а) из комнаты
[18:53:02] Mon вошёл(а) в комнату
[18:58:15] Mon вышел(а) из комнаты
[18:58:29] Mon вошёл(а) в комнату
[18:58:48] sceptic вышел(а) из комнаты: Replaced by new connection
[18:58:55] sceptic вошёл(а) в комнату
[19:00:04] Mon вышел(а) из комнаты: Replaced by new connection
[19:00:05] Mon вошёл(а) в комнату
[19:00:52] Mon вышел(а) из комнаты: Replaced by new connection
[19:00:54] Mon вошёл(а) в комнату
[19:50:16] Mon вышел(а) из комнаты: Replaced by new connection
[19:50:19] Mon вошёл(а) в комнату
[19:50:52] Mon вышел(а) из комнаты: Replaced by new connection
[19:50:54] Mon вошёл(а) в комнату
[20:11:12] Typhon вышел(а) из комнаты: Replaced by new connection
[20:11:49] Typhon вошёл(а) в комнату
[20:16:23] ExplicitCall вышел(а) из комнаты
[20:28:15] Kakadu вошёл(а) в комнату
[20:29:18] ExplicitCall вошёл(а) в комнату
[20:47:49] Typhon вышел(а) из комнаты
[20:50:49] ExplicitCall вышел(а) из комнаты: Replaced by new connection
[20:50:52] ExplicitCall вошёл(а) в комнату
[20:59:53] ExplicitCall вышел(а) из комнаты: Replaced by new connection
[20:59:56] ExplicitCall вошёл(а) в комнату
[21:32:10] Kakadu вышел(а) из комнаты: Replaced by new connection
[21:32:11] Kakadu вошёл(а) в комнату
[22:35:02] ExplicitCall вышел(а) из комнаты: Replaced by new connection
[22:35:09] ExplicitCall вошёл(а) в комнату
[22:37:45] Typhon вошёл(а) в комнату
[22:43:47] gds вышел(а) из комнаты
[22:50:55] Kakadu вышел(а) из комнаты
[22:51:24] gds вошёл(а) в комнату
[22:52:13] gds вышел(а) из комнаты
[23:08:19] Kakadu вошёл(а) в комнату
[23:19:31] gds вошёл(а) в комнату
[23:19:31] Kakadu вышел(а) из комнаты
[23:20:11] Kakadu вошёл(а) в комнату
[23:25:20] gds вышел(а) из комнаты
[23:49:08] animist вышел(а) из комнаты
[23:49:31] animist вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!