Home
OCaml (aka Objective Caml), а также прочие ML'и, F#, Coq, etc
ocaml@conference.jabber.ru
Пятница, 5 июля 2013< ^ >
f[x] установил(а) тему: OCaml / ОКэмл / Камль -- http://ocaml.org/ | Камло - http://camlunity.ru/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire | Мойте руки перед чатом | KEEP CAML AND CURRY ON | F#, Coq - де-факто онтопик
Конфигурация комнаты
Участники комнаты

GMT+4
[00:14:24] tilarids вышел(а) из комнаты: Replaced by new connection
[00:14:26] tilarids вошёл(а) в комнату
[00:15:17] ftrvxmtrx вошёл(а) в комнату
[00:38:05] Typhon вошёл(а) в комнату
[01:30:54] Typhon вышел(а) из комнаты
[01:50:47] Typhon вошёл(а) в комнату
[02:17:00] tilarids вышел(а) из комнаты: Machine going to sleep
[02:35:50] Zbroyar вышел(а) из комнаты
[03:41:41] Typhon вышел(а) из комнаты
[04:19:09] f[x] вошёл(а) в комнату
[04:22:18] <f[x]> ADEpt: а "переходить" на "новые" операторы не собираетесь?
[04:22:42] <f[x]> чтобы наступило равенство и сингулярность?
[05:02:16] f[x] вышел(а) из комнаты
[05:29:07] f[x] вошёл(а) в комнату
[07:38:08] zinid вошёл(а) в комнату
[08:31:51] tilarids вошёл(а) в комнату
[09:43:18] f[x] вышел(а) из комнаты
[10:22:26] f[x] вошёл(а) в комнату
[10:41:28] ermine вошёл(а) в комнату
[10:55:57] ADEpt вышел(а) из комнаты
[11:21:19] ftrvxmtrx вышел(а) из комнаты
[12:00:12] Kakadu вошёл(а) в комнату
[12:01:29] ftrvxmtrx вошёл(а) в комнату
[12:02:05] <Kakadu> Да у них там и так коммунизм
[12:07:19] <f[x]> Kakadu каким-то образом перепутал капитализм с коммунизмом
[12:14:02] <Kakadu> Ладно, не буду вдаваться в детали
[12:14:15] <f[x]> но нам интересно!
[12:14:24] <Kakadu> окей
[12:14:37] <Kakadu> окамл --- это хорошо
[12:14:49] <Kakadu> Коммунизм --- это хорошо
[12:15:07] <Kakadu> Седовательно :), окамл влечет коммунизм
[12:15:19] <Kakadu> Логика железная :)
[12:15:25] <f[x]> да тут не то что логика
[12:15:29] <f[x]> обе предпосылки ложные
[12:16:06] <Kakadu> х-ы в чате1111
[12:18:24] Zbroyar вошёл(а) в комнату
[12:18:57] <Zbroyar> Комунизм - говно.
[12:19:38] <Zbroyar> Я тут в камл поднял кирилический стеммер от keva.ru
[12:19:52] <Zbroyar> Надо кому?
[12:19:57] <Kakadu> Что такое стеммер?
[12:20:08] <Zbroyar> вероятностный лемматизатор
[12:20:37] Kakadu вышел(а) из комнаты
[12:20:44] <f[x]> не осилил :)
[12:20:45] <Zbroyar> Алгоритм, который должен приводить слово из любой формы в нормальную
[12:21:04] <Zbroyar> f[x]: не прикалывайся
[12:21:11] <f[x]> я про птичку
[12:21:26] <f[x]> по хорошему можно было бы стеммеры в одном месте собрать
[12:21:32] <Zbroyar> Я, кстати, его сделал по аналогии с твоим ocaml-stemmer
[12:21:38] <f[x]> угу
[12:21:48] <f[x]> вопрос в том нужно ли это
[12:22:07] <Zbroyar> Нужно что?
[12:22:10] <f[x]> короче там думать над интерфейсом надо и всё такое
[12:22:20] <f[x]> объединять в одну либу
[12:22:23] <f[x]> профит непонятный
[12:22:30] <Zbroyar> Та ну нафік
[12:22:39] <f[x]> ну вот и я примерно о том же :)
[12:22:40] <Zbroyar> Объединять.
[12:23:02] <Zbroyar> Вобщем, кодом могу поделиться, но мне облом заворачивать его в пакет
[12:23:04] <Zbroyar> :-)
[12:23:25] <Zbroyar> Ну и он… странный получился.
[12:23:32] <Zbroyar> У меня входы в utf-8
[12:23:39] <Zbroyar> keva хочет 1251
[12:23:53] <Zbroyar> пришлось прикрутить ему туда еще iconv
[12:24:28] <f[x]> ыы :)
[12:24:46] <Zbroyar> Не, ну iconv я в камл не поднимал
[12:25:19] <Zbroyar> он там только в середине
[12:28:19] <f[x]> могу предложить тогда репо camlunity на гитхаб
[12:28:28] <f[x]> чтобы сохранить для будущих поколений
[12:28:34] <f[x]> мало ли - пригодится кому
[12:32:33] <Zbroyar> Готов выслать файло на мыло :-)
[12:32:55] <Zbroyar> Даже так: файлО на мылО
[12:33:28] <f[x]> ну ок, давай, я выложу на гитхаб тогда
[12:33:49] <f[x]> т.к. вещь потенциально полезная
[12:35:10] ADEpt вошёл(а) в комнату
[12:42:01] <Zbroyar> Див. пошту
[12:44:16] <Zbroyar> CFLAGS = -ccopt -I/usr/local/include
LFLAGS = -ccopt -L/usr/local/lib -ccopt -liconv
[12:44:27] Typhon вошёл(а) в комнату
[12:44:32] <Zbroyar> Все збирається ocamlopt'ом нормально.
[12:45:25] <Zbroyar> Тобто (для Makefile)
[12:45:36] <Zbroyar> .c.o:
    $(OCAMLOPT) $(CFLAGS) -c $<
[12:46:29] <Zbroyar> target: $(cmxes) $(cobjs) target.cmx
    $(OCAMLOPT) $(LFLAGS) $^ -o $@ -linkpkg
[12:47:46] <f[x]> cat ocaml@c.j.r > Makefile
[12:47:56] <Zbroyar> ?
[12:48:00] <f[x]> только почту я не получил
[12:48:34] <f[x]> > ?
ну, копирую чат в Makefile же
[12:48:44] <Zbroyar> ;-)))
[13:28:07] <f[x]> oh the irony : https://twitter.com/camloeba/status/353072020956778496
[13:32:00] <gds> никнейм у чувака хорош.  Русский такой.
[13:32:09] <f[x]> ну а я про что :)
[13:37:35] tilarids вышел(а) из комнаты: Machine going to sleep
[13:48:26] f[x] вышел(а) из комнаты
[14:18:07] tilarids вошёл(а) в комнату
[14:34:43] Kakadu вошёл(а) в комнату
[15:38:22] <aleksey> а почему этот код компилируется, и даже без warning'ов?
let _ =
  let foo =
    let fd = open_in "foo" in
    let foo = Marshal.from_channel fd in
      close_in fd;
      foo
  in
  let f1 (x : int array) = () in
  let f2 (x : float * int array) = () in
    f1 foo.(0);
    f2 foo.(0);
[15:39:08] <aleksey> и .(0) можно убрать
[15:54:16] <Zbroyar> Глюк
[16:19:03] ADEpt вышел(а) из комнаты
[16:19:31] ADEpt вошёл(а) в комнату
[17:30:02] tilarids вышел(а) из комнаты: Replaced by new connection
[17:30:05] tilarids вошёл(а) в комнату
[17:37:52] f[x] вошёл(а) в комнату
[17:40:39] <f[x]> ну у foo тип 'a
[17:42:04] <aleksey> а пчу оно даёт 'a скармливать туда, где можно только int array?
[17:42:09] <f[x]> хотя это не объясняет
[17:42:18] <f[x]> let g foo =
(*   let foo = Obj.magic 0 in *)
  let f1 (x : int array) = () in
  let f2 (x : float * int array) = () in
  f1 foo;
  f2 foo;
  ()
[17:42:23] <f[x]> вот такое уже не компилируется
[17:42:35] <f[x]> в голову приходит только умное слово let-polymophism
[17:42:38] <aleksey> мож там '_a
[17:42:43] <f[x]> нет, там 'f
[17:42:45] <f[x]> 'a
[17:42:48] <f[x]> чистое
[17:43:06] <aleksey> пчу тогда там даёт, а там не компилит?
[17:43:06] <f[x]> надо вызвать gds и проверить как он делал домашние задания по tapl
[17:43:12] <f[x]> вот это вопрос :)
[17:47:41] <f[x]> вообщем я ставлю на let-polymorphism но не могу объяснить почему %)
[17:49:56] <f[x]> а
[17:49:57] <f[x]> смотри
[17:50:01] <f[x]> аналогия
[17:50:11] <f[x]> let () = let id x = x in id 'a'; id 0; ();;
[17:50:12] <f[x]> но
[17:50:28] <f[x]> let f id = id 'a'; id 0; ();;
[17:51:21] <f[x]> let f (id: 'a -> 'a) = id 'a'; id 0; ();;
[17:52:06] <f[x]> т.е. дело в квантификации переменной? (me steps on shaky ground)
[17:52:47] <f[x]> в первом случае тип 'a внутри функции id, а во втором случае - внутри функции f
[17:53:26] <f[x]> и в твоём примере у foo тип 'a внутри себя, т.е. внутри скоупа let foo
[17:53:43] <f[x]> а когда foo передаётся параметром то у него тип 'a внутри всего let () выражения
[17:54:07] <f[x]> поэтому в одном случае не вводится уравнения в вывод типов, а во втором вводится
[17:54:09] <f[x]> gds!
[17:54:19] <f[x]> объясни грамотно
[17:54:31] <f[x]> а то я сейчас всех с удовольствием запутаю
[18:14:44] <aleksey> у тебя оно в 'a подставляет int и char, а у мну в int подставляет 'a
[18:15:06] <aleksey> и генерит сегфолтящийся код
[18:20:20] Kakadu вышел(а) из комнаты
[18:26:00] ADEpt вышел(а) из комнаты
[18:26:51] ADEpt вошёл(а) в комнату
[18:32:49] ftrvxmtrx вышел(а) из комнаты
[18:52:21] <gds> aleksey: f[x]: давайте сократим пример до
let _ =
  let foo = Obj.magic () in
  let f1 (x : int array) = () in
  let f2 (x : float * int array) = () in
    f1 foo.(0);
    f2 foo.(0)
как работает вывод типов:
foo.(0) => foo : 'a array
f1 foo.(0) => унификация int = 'a => foo : int array
foo.(0) => foo : 'a array
f2 foo.(0) => унификация 'a = float * int array => foo : (float * int array) array
из let-полиморфизма следует, что foo будет проходить унификацию в месте использования, а не в месте объявления.
Если же мы перепишем let a = b in c в виде (fun a -> b) c, то:
# let _ =
    (fun foo ->
    let f1 (x : int array) = () in
    let f2 (x : float * int array) = () in
      f1 foo.(0);
      f2 foo.(0)
    ) Obj.magic ();;
Warning 27: unused variable x.
Warning 27: unused variable x.
Error: This expression has type int array
       but an expression was expected of type float * int array
такие дела.
[18:57:33] <gds> тьфуты, скобки забыл:
# let _ =
    (fun foo ->
    let f1 (x : int array) = () in
    let f2 (x : float * int array) = () in
      f1 foo.(0);
      f2 foo.(0)
    ) (Obj.magic ());;
ну да сообщение об ошибке одно и то же.
[19:00:11] tilarids вышел(а) из комнаты: Machine going to sleep
[19:00:47] f[x] взял пирожок с полки
[19:04:31] <aleksey> а если оно даёт делать сегфолтящийся код, это бага или фича?
[19:05:20] <aleksey> я понимаю, что надо было с вызовом Marshal писать тип сразу, но вот чего-то забыл и напоролся
[19:05:24] <gds> если Marshall.from_ -- то фича.
[19:09:52] <f[x]> потому что не существует let x = такого чтобы у x был легитимный тип 'a
[19:10:09] <f[x]> т.е. это либо exit либо raise
[19:10:21] <f[x]> и делай с ним что хочешь - всё валидно
[19:25:36] Typhon вышел(а) из комнаты
[19:42:02] zinid вышел(а) из комнаты
[19:47:11] Typhon вошёл(а) в комнату
[20:20:12] f[x] вышел(а) из комнаты
[20:34:31] ADEpt вышел(а) из комнаты
[20:35:18] ADEpt вошёл(а) в комнату
[20:36:07] Typhon вышел(а) из комнаты
[20:45:48] ADEpt вышел(а) из комнаты
[20:48:29] ADEpt вошёл(а) в комнату
[20:48:44] Typhon вошёл(а) в комнату
[21:32:33] Typhon вышел(а) из комнаты
[22:45:10] tilarids вошёл(а) в комнату
[23:02:33] <komar> Я понял, для чего нужно let ... and ... and ... in
[23:02:48] <komar> Это если нерекурсивным let’ом злоупотреблял и обосрался, то то можно на let ... and заменить.
[23:04:04] <gds> ваистену так, ибо!
[23:14:24] gds вышел(а) из комнаты
[23:14:32] gds вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!