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

GMT+4
[00:28:15] ermine вышел(а) из комнаты
[00:59:01] Kakadu вышел(а) из комнаты
[01:14:07] komar вышел(а) из комнаты
[02:28:39] zert вышел(а) из комнаты
[04:40:37] vshender вошёл(а) в комнату
[04:55:45] iNode вышел(а) из комнаты
[07:51:41] digital_curse вышел(а) из комнаты
[08:39:59] iNode вошёл(а) в комнату
[09:01:13] gds вошёл(а) в комнату
[09:30:26] Typhon вышел(а) из комнаты
[09:45:22] komar вошёл(а) в комнату
[10:07:41] ermine вошёл(а) в комнату
[10:24:57] serp256 вошёл(а) в комнату
[10:34:40] Kakadu вошёл(а) в комнату
[10:46:46] komar вышел(а) из комнаты
[10:52:06] ʇsʎɯ вошёл(а) в комнату
[10:56:07] zert вошёл(а) в комнату
[11:38:02] gds вышел(а) из комнаты: Replaced by new connection
[11:38:03] gds вошёл(а) в комнату
[12:10:01] arhibot вошёл(а) в комнату
[13:29:09] arhibot вышел(а) из комнаты
[13:35:09] komar вошёл(а) в комнату
[13:56:15] ʇsʎɯ вышел(а) из комнаты
[13:58:48] ʇsʎɯ вошёл(а) в комнату
[14:05:47] ʇsʎɯ вышел(а) из комнаты
[14:12:24] Kakadu вышел(а) из комнаты
[14:25:49] ʇsʎɯ вошёл(а) в комнату
[14:35:44] <gds> рассмотрим rank-2 полиморфизм в окамле и в х-е.  Поглядим на http://okmij.org/ftp/Computation/Existentials.html .  Там увидим определение "data SE = forall x. SE x (x -> String) ", которое на окамле записалось бы, если дословно переводить, в два типа:
type se = { se_data : 'x . se_aux 'x }
and se_aux 'x = ('x * ('x -> string))
Однако, как подсказывает здравый смысл, определения нифига не одинаковы.  Более того, окамловское объявление вообще не позволит создать значение с типом se (магию не берём в рассмотрение).
Потому что, как подсказывают из зала, forall -- это не то же самое, что Большая Лямбда Поверх Типов, как она у Б.Пирса и в окамле, а так называемый dependent product.
Выводы: -Nч времени, -M извилин мозга, безжалостно спрямлённых во время разбирательств, -7.40 в карму х-я за логичность.
[14:37:32] <gds> меня спросят "зачем же ты, дурачок, полез в известное болото?", и я отвечу.  Нужны existential types, и я искал, как бы их попроще сэмулировать на окамле.
[14:41:28] <ʇsʎɯ> когда же сделают нормальный инстоллер для 3.12 для винды?
[14:42:02] <zert> не нужно
[14:42:52] <ʇsʎɯ> кому не нужно?
[14:43:17] <zert> венда не нужна
[14:43:28] <ʇsʎɯ> кому, опять же?
[14:43:45] <zert> тому, кому она не нужна
[14:44:11] arhibot вошёл(а) в комнату
[15:02:34] arhibot вышел(а) из комнаты
[15:07:06] ʇsʎɯ вышел(а) из комнаты
[15:07:21] ʇsʎɯ вошёл(а) в комнату
[15:08:38] <f[x]> gds: слишком заумно рассуждаешь, ты нам скажи простым пролетарским языком - х-ь опять сел в лужу и только благосотворённый камль спасёт cs?
[15:09:58] <f[x]> ʇsʎɯ: пожалуйся в трекер или рассылку, может это коварный план по подсчёт камловиндоюзеров
[15:10:57] ʇsʎɯ вышел(а) из комнаты
[15:13:12] <gds> f[x]: ах да, конечно, самое главное-то забыл.  Конечно, ты всё правильно просуммировал.  Жалкая агония х-я доставляет мне удовлетворение.
[15:14:33] <zert> х-ь не нужен же
[15:15:13] <komar> А на чем считать факториал и писать комбинаторные парсеры?
[15:15:25] <gds> только некоторые наработки на нём заставляют смотреть на него, а так -- да, не нужен.
[15:15:41] <gds> факториал будем считать на bc, а комбинаторные парсеры писать на схеме.
[15:15:50] <f[x]> gds: смотри, да не засматривайся!
[15:16:23] <olegfink> gds, мне пришлось особенно долго соображать, что дефис в "х-е" и "х-я" заменяет не одну букву
[15:17:40] <komar> olegfink: о хаскелле надо думать, о хаскелле!
[15:18:56] <olegfink> надо как-нибудь спросить у лиц, подкованных в вопросе: в слове б-г дефис заменяет одну букву "о" или все буквы от "б" до "г"?
[15:20:42] <f[x]> одну букву 'а'
[15:20:51] <gds> Так!
[15:22:51] <olegfink> так вот кому они поклоняются.
[16:05:05] ʇsʎɯ вошёл(а) в комнату
[16:24:23] Typhon вошёл(а) в комнату
[16:33:01] arhibot вошёл(а) в комнату
[16:33:19] arhibot вышел(а) из комнаты
[17:19:42] Kakadu вошёл(а) в комнату
[17:29:20] arhibot вошёл(а) в комнату
[17:30:21] gds вышел(а) из комнаты
[18:08:36] iNode вышел(а) из комнаты
[18:26:13] gds вошёл(а) в комнату
[18:32:10] gds вышел(а) из комнаты: Replaced by new connection
[18:32:12] gds вошёл(а) в комнату
[18:36:25] serp256 вышел(а) из комнаты
[18:59:02] arhibot вышел(а) из комнаты
[19:21:19] f[x] вышел(а) из комнаты
[19:38:57] ʇsʎɯ вышел(а) из комнаты
[20:25:53] Kakadu вышел(а) из комнаты
[20:41:32] f[x] вошёл(а) в комнату
[20:43:51] Kakadu вошёл(а) в комнату
[20:45:40] iNode вошёл(а) в комнату
[21:02:31] Kakadu вышел(а) из комнаты: Replaced by new connection
[21:02:32] Kakadu вошёл(а) в комнату
[21:47:29] arhibot вошёл(а) в комнату
[22:21:45] ygrek вошёл(а) в комнату
[22:29:15] iNode вышел(а) из комнаты
[22:36:59] komar вышел(а) из комнаты: Replaced by new connection
[22:37:00] komar вошёл(а) в комнату
[22:42:15] komar вышел(а) из комнаты
[22:56:47] <zert> а подскажите пример чтобы функции первого класса и высшего порядка показывал коротко, но наглядно
[22:57:19] <Kakadu> в смысле?
[22:57:19] <Typhon> map?
[22:57:48] <Kakadu> положим надо все элементы списка умножить на два
[22:58:07] <Kakadu> а потом начальник захотел все элементы в кварат возводить
[22:58:10] <Kakadu> а потом в куб
[22:58:28] <Kakadu> а мы ему сказали: мы не будет писать три функции - мы напишем одну
[22:58:44] <Kakadu> ктороая будет что-то делать с каждым элементом списка
[22:58:51] <Kakadu> нам так в универе объясняют)))
[22:58:59] <zert> мап как-то избито
[22:59:06] <zert> просто в презентацию запихнуть
[22:59:25] <zert> Kakadu: да я знаю, что это, надо людям объяснить :)
[22:59:32] <Kakadu> сортировка, где hof - сравнение
[22:59:42] <zert> вернее, не то, чтобы объяснить, а коротко и наглядно показать
[22:59:51] <Typhon> как использовать, типа?
[22:59:55] <zert> ага
[23:00:10] <olegfink> "коротко и наглядно показать" и "избито" -- две вещи несовместные
[23:00:12] <zert> и чтобы люди, не знакомые с фп, могли понять
[23:00:19] <Kakadu> сортировка
[23:00:22] <zert> olegfink: ну вот как-то так
[23:00:34] <zert> не, сортировка уже сложно сильно
[23:00:41] <Typhon> а аудитория какая?
[23:00:47] <zert> погромисты
[23:00:55] <Typhon> уровень каков? и на чем погромисты?
[23:00:57] <zert> но императивщики, в массе своей
[23:01:07] <zert> уровень разный, и на разных языках
[23:01:15] <Kakadu> можно рассказать про функторы в С++
[23:01:16] <zert> конференцие разработчиков
[23:01:25] <zert> не, я про ФП
[23:01:41] <zert> камло, ерлангие, скалка
[23:02:06] <Typhon> можыт сначала java-style map с классом Caller и методом run() каким-нибудь а потом показать, что они неудачники, потому что можно легко и красиво на hof делать
[23:02:11] <olegfink> zert: ну в общем-то сортировка в таком случае лучше мапа
[23:02:17] <arhibot> покажи каррирование
[23:02:28] <olegfink> покажи сишный qsort и скажи, что вот так в фп и делают :-)
[23:02:42] <zert> каррирование слишком сложно для аудитории,проверял
[23:02:50] <arhibot> и скажут: дааа на вашем окамле, можно только сортирвки делать
[23:03:00] <arhibot> хацкеле и тп---типичная реация
[23:03:03] <olegfink> arhibot: а так -- еще и каррировать функции, да?
[23:03:27] <arhibot> ну сортировки, фибоначи и факториалы--вообще упоминать не стоит, да
[23:03:50] <zert> это уже даже не избито, а изнасиловано и сожжено
[23:03:52] <olegfink> zert: вообще какая задача? показать, что такое фп, или почему фп типа круче?
[23:03:56] <zert> ага
[23:04:02] <olegfink> что ага?
[23:04:12] <zert> показать, что такое фп
[23:04:23] <zert> ну и намекнуть, чем круче
[23:04:26] <arhibot> покажи им числа черча! и пусть им будет хорошо!
[23:04:31] <zert> наверное, скорее второе
[23:04:36] <Kakadu> расскажать про накопление результата в функции
[23:04:38] <olegfink> ну если второе -- то все просто
[23:04:44] <zert> arhibot: они тогда вовек не полезут к фп
[23:04:54] <arhibot> я видел где-то презентацию: f# vs c# майрософта
[23:04:59] <arhibot> наглядно весьма
[23:05:00] <olegfink> возьми любую классическую задачу, где нужны adt и мапы, и напиши решение на жабе и на окамле
[23:05:18] <zert> olegfink: да там доклад, ограниченное время
[23:05:24] <zert> писать код — неформат
[23:05:26] <olegfink> так кому нужны детали?
[23:05:32] <olegfink> этот код никто читать не будет
[23:05:39] <olegfink> но вот количество строк прибросить смогут
[23:05:41] <Kakadu> задача: проверить, что все числа в списке различны. с аккумулированием в ыункции
[23:05:55] <Kakadu> за O(n)
[23:06:09] <Kakadu> без всяких хэштаблиц
[23:06:10] <Typhon> вот упомянутая презентация так и делает: слева сотни строк сишарпа, справа -- десяток фшарпа.
[23:06:21] <arhibot> Typhon: именно
[23:06:27] <zert> Typhon: а где поглядеть?
[23:06:35] <olegfink> Kakadu: ну я бы все-таки adt показал, хотя к функциональщине они и не имеют отношения
[23:06:36] <arhibot> сейчас гляну--сохранял вроде
[23:07:24] <arhibot> потерялось =(
[23:08:08] <Kakadu> в ru_declarative какой-то мужик давал слайды почему функцинональщина круче
[23:08:25] <Kakadu> с картинками бдсм, Эйфелевой башни и Барбры Лискв
[23:08:34] <olegfink> а ни у кого нету слайдов, почему функциональщина -- отстой?
[23:08:55] <zert> с бдсм, пизанской башней и чорным властелином?
[23:09:18] <Typhon> olegfink: http://shootout.alioth.debian.org/ ^_^
[23:09:27] <olegfink> это не слайды
[23:10:13] <olegfink> и вообще это про то, что на хаскеле можно писать с malloc, а не почему что-то там чего-то круче или отстой.
[23:10:42] ermine вышел(а) из комнаты
[23:10:55] <Typhon> plumqz или как его там, из жж с крокодилом на юзерпике, хотел в fprog что-то типо того писать, потом где-то в коммунити выкладывал, емнип
[23:11:14] <Typhon> там правда не совсем, почему отстой, а "почему так получается, что фп как бы круче"
[23:12:08] <Typhon> zert: http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!725.entry блогпсто, что-то типа той презентации
[23:12:39] <arhibot> не, та круче была
[23:12:45] komar вошёл(а) в комнату
[23:12:54] <Typhon> arhibot: ага
[23:17:10] <zert> и да, map он и в перле есть
[23:17:20] <zert> надо что-нить такое специфичное
[23:17:35] <olegfink> adt
[23:17:41] <zert> adt уже есть
[23:17:50] <zert> надо для функций пример
[23:18:34] <olegfink> ну вот имхо отдельно фичи не надо
[23:18:43] <olegfink> только если твоя аудитория -- не language geeks
[23:19:10] <olegfink> но в 2010-м вряд ли тебе придется рассказаывать такой аудитории, что такое фп
[23:19:24] <zert> а как не отдельно-то?
[23:19:54] <arhibot> решение задачи
[23:20:00] <olegfink> да, я уже говорил
[23:20:20] <zert> решение задачи на одном слайде целиком не разместишь
[23:20:22] <Kakadu> а когда шой будет?
[23:20:27] <Kakadu> шоу*
[23:20:37] <zert> 2-го
[23:21:37] <olegfink> разместишь
[23:21:46] <olegfink> читаться должен только окамловый код
[23:21:58] <olegfink> жабный -- не обязательно
[23:22:13] <olegfink> задача -- что-нибудь тупое, скажем, обход деревяшки
[23:22:14] <zert> там строчек 15 максимум влезет
[23:22:21] <olegfink> ну и достаточно
[23:22:32] <zert> ну на обходе деревяшки только adt
[23:22:46] <zert> куда там функции высшего порядка приделать?
[23:22:48] <olegfink> нет, твои любимые hof тоже
[23:23:03] <olegfink> как куда? обходить можно с разной целью
[23:23:13] <olegfink> напиши treemap/treefold
[23:23:15] <olegfink> по вкусу
[23:23:18] <zert> а
[23:23:19] <Kakadu> пример для HOF можно взять из Лекций Кирпичёва, что сейчас в ПОМИ читаются
[23:23:36] <zert> а где лекции лежат?
[23:23:42] <Kakadu> в гуглдоках
[23:23:53] <Kakadu> он там ориетнтируется на MIT книжку
[23:24:07] <Kakadu> http://groups.google.com/group/csclub-fprog
[23:24:20] <olegfink> zert: да даже просто treeiter можно, на самом деле :-)
[23:24:45] <olegfink> только это тебя немного в типах ограничит -- но не страшно
[23:25:01] <arhibot> да можно просто балансировку в каком-нить типе
[23:25:09] <olegfink> успех тебе обеспечен, только не забудь решение на жабе написать с visitors
[23:25:10] <arhibot> в пару строк против огого
[23:25:25] <Kakadu> а что такое "балансировка в каком-то типе" ?
[23:26:24] <arhibot> деревяшек
[23:27:34] <zert> на таких мероприятиях, если кода больше четырёх строчек, начинают зевать и смотреть в потолок
[23:27:49] <olegfink> это тебе и нужно
[23:27:51] <Typhon> так жабный код не надо показывать
[23:27:55] <Typhon> его в фон, размыто
[23:27:56] <olegfink> надо!
[23:28:00] <olegfink> только чтобы его не читали
[23:28:03] <olegfink> не дать времени
[23:28:03] <Typhon> типа "ой, мама, дохераж!"
[23:28:08] <olegfink> угу
[23:29:20] <olegfink> вообще зависит от аудитории, можно и что-то поинтеллектуальнее, но я бы взял самое тупое: http://en.wikipedia.org/wiki/Visitor_pattern#Source
[23:29:21] <arhibot> zert: а про отсутствие заморочек при || программирование расскажешь?
[23:29:23] <Kakadu> можно взять зачачу поиска расстояния до ближайшего листа в бинарном дереве
[23:29:28] <zert> arhibot: да
[23:29:39] <Kakadu> там на хаскеле как раз 4 строчки
[23:29:47] <Kakadu> и никто не разберется что там написано)
[23:29:52] <zert> гг
[23:30:01] <arhibot> да на С не сильно больше
[23:30:15] <Kakadu> если эффективно, то больше сильно
[23:30:33] <arhibot> а на хацвеле эффективная?
[23:30:43] <Kakadu> угу
[23:30:53] <olegfink> dons гарантирует
[23:31:21] <olegfink> при предварительном прогоне в течение 12 часов через acovea и использовании ghc-llvm из завтрашнего svn
[23:31:55] <zert> в пёрлах всяких же тоже hof есть
[23:32:04] <arhibot> wtf hof?
[23:32:08] <zert> надо показать, чем фпшне hof лучше
[23:32:11] <Typhon> high order funcs
[23:32:18] <arhibot> а
[23:32:20] <zert> или он ничем не лучше
[23:32:22] <Typhon> покажите в перле хоф
[23:32:29] <Kakadu> data Tree = Tip | Node Tree Tree deriving (Show,Eq)
nextLevel ts = ts >>= \(Node x y) -> [x, y]
shortestPath t = fromJust $ findIndex (any (==Tip)) (iterate nextLevel [t])
[23:32:32] <Typhon> меня б-г миловал %)
[23:32:34] <zert> Typhon: тот же мап
[23:32:35] <Kakadu> две строчки по сути
[23:32:43] <Kakadu> извиняюсь за хаскель)
[23:33:23] <zert> Kakadu: я уже слышу, как в зале раздаются возгласы "ебааать...."
[23:33:43] <Kakadu> а можно ещё так:
shortestPath t = fromJust $ findIndex (any (==Tip)) (iterate (>>= \(Node x y) -> [x, y]) [t])
[23:34:16] <Kakadu> ладно, я больше не буду приводить примеры того, что не надо показывать в презентации
[23:34:28] <zert> может ну их нафиг вообще? сказать, что они есть, и ладно?
[23:34:55] <olegfink> -- мальчик, а что ты будешь делать, если на тебя нападут разбойники?
[23:35:12] <olegfink> -- я знаю кунгфу, карате, афкидо и много других страшных слов!
[23:35:18] <zert> :))
[23:35:21] <olegfink> *айкидо
[23:35:24] <arhibot> айкидо наше все
[23:35:32] <zert> да блин, не могу найти уместного примера
[23:35:50] <zert> ладно, суну мап
[23:35:58] <zert> я теперь понял, почему он избитый
[23:35:59] <arhibot> возьми пример какой-нить из сикпа
[23:36:18] <Kakadu> так всё так, как с задачей поиска совпадающих чисел в списке?
[23:36:50] <zert> совпадающих с чем?
[23:37:25] <Kakadu> ну есть ли одинаковые числа в списке
[23:37:28] <Kakadu> differ lst  = helper (\x -> False) lst
  where
    helper _ []       = True
    helper mem (x:xs) =
      if mem x then False
      else helper (\y -> if y==x then True else mem y) xs
[23:38:14] <Kakadu> без хэштаблиц за линейное время
[23:38:44] <Kakadu> последние две строчки можно объединить с помощтю ||
[23:38:49] <Kakadu> ещё короче будет
[23:38:57] <zert> сложно
[23:40:01] <olegfink> zert: ну тогда на k:  |/.(1<#:)'=:
[23:40:52] <olegfink> точка не нужна
[23:41:19] <arhibot> zert: а там какой язык у тебя?
[23:41:21] ygrek вышел(а) из комнаты: разрыв моска
[23:41:39] <zert> arhibot: да никакого, можно псевдокод типа ml
[23:42:14] ygrek вошёл(а) в комнату
[23:45:08] gds вышел(а) из комнаты
[23:45:32] <olegfink> точно на k не хочешь? вот еще на 2 символа короче: 1<|/#:'=:
[23:46:15] <Typhon> зачем k если есть q? ( ну кроме экономии символов, ага )
[23:46:26] <Typhon> или на k можно делать то, что на q нельзя?
[23:46:38] <Typhon> (я в k не ковырял, а q попинываю )
[23:46:54] <Typhon> (q от kx systems, раз-ся)
[23:48:05] <olegfink> в голове про то, чтобы на q чего-то было совсем не написать, нету
[23:48:28] <olegfink> в принципе такая ситуация возможна, если в q.k что-то забыли
[23:48:54] <olegfink> ну а вообще -- да, во-первых, экономия, во-вторых, привычка
[23:49:10] <olegfink> мне k гораздо проще читать, чем q
[23:50:27] <zert> гик
[23:50:58] gds вошёл(а) в комнату
[23:51:27] <olegfink> бонусы у q тоже есть: во-первых, парсер в твоем распоряжении, во-вторых, можно определять инфиксные функции
[23:52:51] <Typhon> "парсер в твоем распоряжении" -- что под этим подразумеваешь? что можно дописать?
[23:53:00] <Typhon> *подпатчить
[23:53:21] <olegfink> нет, он, к сожалению, на си (копий об это было в свое время сломано немало)
[23:53:31] <olegfink> но его можно юзать в своекорыстных целях
[23:54:14] <olegfink> у меня где-то валяется генератор c++ из q
[23:54:42] <Typhon> а наоборот нету? ^_^
[23:55:22] <olegfink> а у тебя есть под рукой парсер c++?
[23:55:43] <Kakadu> да, у кого есть парсер С++
[23:55:48] <olegfink> у гну!
[23:56:07] Kakadu подтащнивает от LLVM+CLang
[23:56:19] Kakadu c GNU не возился
[23:56:24] <arhibot> я вас боюсь
[23:56:54] <olegfink> ну у меня тоже есть парсер c++, только он несколько для специфических вещей сделан. ну и глючный немного.
[23:58:10] <olegfink> Typhon: вообще, могу забесплатно подсказать, iirc, недокументированную фичу q: ты, небось, замечал выражения "q)" и "k)"?
[23:58:48] <Typhon> в интерпретаторе то? если да, то только q) видел
[23:59:05] <olegfink> ну, ты можешь временно перейти в режим k, начав строчку с k)
[23:59:26] <olegfink> так вот, этот механизм достаточно общий. работает он следующим образом:
[23:59:29] <zert> тэкс, а вот как бы замыкания наглядно представить?
[23:59:47] <zert> чтобы самый минимум кода
[23:59:49] <Typhon> zert: смотри в sicp, наверное
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!