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

GMT+4
[00:10:20] sevenov вышел(а) из комнаты
[00:10:42] sevenov вошёл(а) в комнату
[00:14:09] sevenov вышел(а) из комнаты
[00:14:23] sevenov вошёл(а) в комнату
[00:22:54] sceptic вышел(а) из комнаты
[00:28:35] sevenov вышел(а) из комнаты
[00:28:49] sevenov вошёл(а) в комнату
[01:33:44] sevenov вышел(а) из комнаты
[01:34:49] sevenov вошёл(а) в комнату
[02:35:04] john вышел(а) из комнаты
[02:36:33] john вошёл(а) в комнату
[02:57:23] sevenov вышел(а) из комнаты
[04:34:41] sevenov вошёл(а) в комнату
[04:35:14] sevenov вышел(а) из комнаты
[04:36:31] sevenov вошёл(а) в комнату
[06:34:57] sevenov вышел(а) из комнаты
[07:43:54] john вышел(а) из комнаты
[08:15:26] john вошёл(а) в комнату
[09:06:08] sceptic вошёл(а) в комнату
[09:39:07] Typhon вошёл(а) в комнату
[09:53:53] ygrek вошёл(а) в комнату
[09:55:30] gds вышел(а) из комнаты
[11:02:18] animist вышел(а) из комнаты: Replaced by new connection
[11:02:22] animist вошёл(а) в комнату
[11:02:28] f[x] вошёл(а) в комнату
[11:17:58] ygrek вышел(а) из комнаты
[11:56:51] f[x] вышел(а) из комнаты: Replaced by new connection
[11:56:52] f[x] вошёл(а) в комнату
[14:34:18] gds вошёл(а) в комнату
[14:42:10] john вышел(а) из комнаты
[15:17:15] sevenov вошёл(а) в комнату
[15:49:32] ygrek вошёл(а) в комнату
[16:17:31] Typhon вышел(а) из комнаты
[16:18:22] Typhon вошёл(а) в комнату
[16:43:48] aloner2k вошёл(а) в комнату
[17:10:33] <f[x]> аргх, карринг + мутабельные значения может быть неожиданным
[17:11:16] <f[x]> типа такого
let output = output_ch !log_ch
далее по коду log_ch := ... никакого влияния на output не окажет
[17:14:51] <gds> о да.
нужно устроить экспансию!
[17:17:18] <f[x]> :)
[17:30:25] gds вышел(а) из комнаты
[17:52:25] john вошёл(а) в комнату
[18:01:50] john вышел(а) из комнаты: Replaced by new connection
[18:01:51] john вошёл(а) в комнату
[18:03:58] f[x] тащится от туториала по jocaml
[18:08:50] john вышел(а) из комнаты
[18:22:54] gds вошёл(а) в комнату
[18:23:47] <gds> f[x]: а покажь-ка. А то те доки, которые я видел, не слишком позволяли тащиться.
[18:28:30] sevenov вышел(а) из комнаты
[18:30:45] <f[x]> http://moscova.inria.fr/~maranget/papers/jocamlrus/index.html
[18:31:14] <gds> гуд, буду читать.
[18:35:00] <gds> интересно, почему в урле "jocamlrus", тогда как самого "rus" не видно.
[18:40:00] <f[x]> caml'r'us
[18:43:29] <gds> нипанятна, но это мелочи.
начал читать. круто, однако!
и понял, почему дока прошла мимо меня -- они реимплементили jocaml на окамле 3.10, тогда как грокнуть jocaml я в последний раз пробовал несколько лет назад, ещё задолго до 3.10.
[18:46:48] <f[x]> и он plug'n'play, я могу впихнуть его в проект хоть прям сейчас, на пробу
[18:49:44] sevenov вошёл(а) в комнату
[18:51:34] john вошёл(а) в комнату
[18:51:39] john вышел(а) из комнаты: Replaced by new connection
[18:51:40] john вошёл(а) в комнату
[18:55:04] <f[x]> только оператор & путается под ногами
[18:55:36] <gds> тоже заметил про "&". а мы его в "обычно используемые инфиксные" хотим..
[18:56:13] john вышел(а) из комнаты
[18:56:14] <f[x]> вот именно, он у меня уже по всему коду разползся
[18:57:43] <f[x]> бгг
Error: Files /usr/lib/ocaml/unix.cmxa and /usr/lib/ocaml/unix.cmxa
both define a module named Unix
[18:58:04] <gds> O RLY???
[18:58:30] <f[x]> unix неявно влинковывается, убрал из _tags
[18:58:37] <f[x]> всё, собралось
[18:58:48] <f[x]> буду экспериментировать
[18:58:51] <gds> то, что "&" расползся, в принципе исправимо регекспами. знать бы, на что менять.
[18:59:16] <f[x]> временно &|
[18:59:26] <gds> если сможешь, может задокументируешь игры с jocaml в вики? можно тупым дампом, а там уже разгребём-откошерируем.
[18:59:36] <f[x]> ок
[19:00:44] <gds> &| -- не эстетично..
может симметрично с "|>" (который определён как value ( |> ) x f = f x) сделать "<|"? но тоже хреново смотрится.
[19:01:08] <gds> ау, эстеты, мы ищем вас! :)
[19:07:21] <f[x]> насчёт |> я выбрал >> (вроде из-за ассоциативности, обсуждали раньше, но сейчас не уверен)
[19:09:20] <ermine> gds: знаешь, за что я ненавижу перл? за многообразие символов в синтаксисе
[19:12:27] <gds> f[x]: ">>" будет конфликтовать с camlp4, по идее.
[19:12:34] <gds> ermine: а я -- за более принципиальные вещи.
[19:14:09] <ermine> та идеи пофиг
[19:14:18] <ermine> но запоминать что и как писать я не могу
[19:15:12] <gds> тю. если обрезать перлячий синтаксис и использовать только подмножество, всё становится вполне приемлемо. настолько, что раздражает уже не синтаксис.
[19:15:50] <ermine> >> не будет конфликтовать с camlp4, если второе не юзать :)
[19:16:01] <f[x]> gds: всякие расширения использую - не сталкивался (наверное << будет конфликтовать)
[19:16:22] <gds> я про сами antiquotations.
[19:17:12] <ermine> антиквотинг - это строка от $ до $
[19:18:07] <ermine> и ее выделяет вроде бы не абы кто, а парсер, чье имя указано в <:..<
[19:18:08] <gds> ну хз, как оно называется: <<какая-то-фигня>>.
[19:18:52] <ermine> << .. >> это квотация
[19:19:15] <ermine> надо продолжить писать вики про camlp4, чтобы всякие gds читали между делом
[19:21:08] <gds> и не только они, замечу.
[19:21:55] <ermine> gds: (пробуя на зуб будущую статью) квотация - это выделение в << >> строки, которую парсер камля не понимает; ее парсит парсер, чье имя указано в <:name<, внутри квотации используются антиквотации $..$, которую парсер name не парсит, а отдает вышестоящему парсеру, внутри $...$ могут быть новые квотации и так далее
[19:22:53] <ermine> <:expr< let x = x >> - парсер expr получит строку " let x = x " и превратит в ast
[19:23:15] <ermine> в общем да, надо писать вики
[19:25:08] <gds> ага, понял идею.
писать-то надо, причём можно вполне тупо: пусть лучше будет контент без разметки, чем разметка без контента. в частности, можно сделать в статье про camlp4 раздел "квотации и антиквотации" и скопипастить туда кусок чата.
[19:25:59] <gds> странное дело.
# value ( & ) f x = f x;
value ( & ) : ('a -> 'b) -> 'a -> 'b = <fun>
# print_string & string_of_int & 123;
123- : unit = ()
# value ( &| ) f x = f x;
value ( &| ) : ('a -> 'b) -> 'a -> 'b = <fun>
# print_string &| string_of_int &| 123;
This expression has type int -> string but is here used with type string
раньше думал, что свойства user-defined инфиксных операторов зависят только от первого символа операции, и для "&" должны быть одинаковы с "&|".
[19:28:00] <gds> в общем, "|" не катит, так как слишком специальный он. "<|", "$" и "&|" не катят -- фейлят ровно так же, как "&|", на этом конкретном примере.
[19:29:37] <gds> удивительно, что удалось объявить операторы "\" и "\\", но они тоже фейлят.
[19:30:09] <f[x]> хм, странно
[19:30:18] <gds> "//" тоже. (а был бы хороший майндфак плюсовикам)
[19:30:42] <gds> но я проверял на 3.10.2. сейчас для верности проверю "&|" на 3.11(.1)?.
[19:30:51] <f[x]> я проверил на 11.1
[19:31:02] <f[x]> навреное & специальный из-за того что builtin
[19:32:23] <gds> тоже проверил на 3.11.1.
может попросить их выслать нам ещё специальных builtin-операторов из солнечной франции?
[19:33:13] <gds> ща почитаю доку внимательно и пойду какать в мантис. не всё ж тебе травить их.
[19:38:05] <gds> во редиски.
http://caml.inria.fr/pub/docs/manual-ocaml/expr.html
операторы -- ассоциативность:
=… <… >… |… &… $… -- left
& && -- right
а нам нужно как раз right.
[19:39:32] <gds> с другой стороны, та табличка систематизирует поиск нужного оператора.
[19:42:17] <f[x]> let (@&) f x = f x;;
[19:42:20] <f[x]> :))
[19:44:21] sevenov вышел(а) из комнаты: Replaced by new connection
[19:44:29] sevenov вошёл(а) в комнату
[19:45:35] sceptic вышел(а) из комнаты
[19:45:53] sevenov вышел(а) из комнаты
[19:46:05] sevenov вошёл(а) в комнату
[19:52:48] <gds> гыгы, эстет!
[19:53:42] <gds> лучше "***" !1111
[19:55:46] <gds> а из легковесных -- может ^| заюзать. но криво...
[19:56:49] <gds> ну или
# print_string ^^ string_of_int ^^ 123;
123- : unit = ()
, хотя какое-то, простите, онемэ.
[19:59:57] john вошёл(а) в комнату
[20:06:22] Typhon вышел(а) из комнаты
[20:07:44] john вышел(а) из комнаты
[20:08:25] john вошёл(а) в комнату
[20:09:03] <f[x]> ^^ занято
[20:09:04] john вышел(а) из комнаты
[20:09:50] <f[x]> наверное проще оставить как есть
[20:10:58] <gds> занято форматными строками?
[20:11:06] <gds> а как оно есть сейчас -- "&"?
[20:11:11] <gds> , или вообще никак?
[20:12:36] <f[x]> let (&|) f g = function x -> f (g x)
[20:12:57] <f[x]> и левая ассоциативность не мешает
[20:13:07] sceptic вошёл(а) в комнату
[20:17:11] f[x] вышел(а) из комнаты
[20:18:33] <gds> # value ( &| ) f g = fun x -> f (g x);
value ( &| ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun>
# print_string &| string_of_int &| 123;
This expression has type int but is here used with type 'a -> int
[20:18:56] <sceptic> А кто-нибудь из присутствующих использует vim для кодинга на камле?
[20:22:52] <ermine> .&. не подойдет?
[20:24:10] <gds> # value ( .&. ) f x = f x;
value ( .&. ) : ('a -> 'b) -> 'a -> 'b = <fun>
# print_string .&. string_of_int .&. 123;
Unbound value &.
#
[20:24:41] <ermine> абыдна
[20:25:26] <gds> попробовал эту крякозяблу набрать несколько раз подряд. не очень-то обидно, хотя на любителя.
[20:25:34] <ermine> хотя & уже занят под f x, так что .&. по сути незачем
[20:26:00] <gds> в joint-calculus оно занято не под f x.
[20:26:32] <ermine> ну неважно
[20:33:47] sevenov вышел(а) из комнаты
[20:34:37] sevenov вошёл(а) в комнату
[20:51:48] animist вышел(а) из комнаты: Replaced by new connection
[20:51:51] animist вошёл(а) в комнату
[20:53:41] sevenov вышел(а) из комнаты
[20:54:11] sevenov вошёл(а) в комнату
[20:56:02] <sceptic> http://codepad.org/XAQvJPom А где я не прав?
[21:03:19] <gds> "имеет тип символ, использовано с типом строка".
[21:06:40] <gds> # let string_of_char =
  let a = Array.init 256 (fun i -> String.make 1 (Char.chr i)) in
  fun c -> a.(c);;
val string_of_char : int -> string = <fun>
# string_of_char 65;;
- : string = "A"
#
[21:09:06] <sceptic> мм.. А почему # let a = 1::2 ;; ругаетсо? хочется получить список [1; 2]
[21:10:07] <sceptic> а, вроде понял.
[21:10:26] <sceptic> # let a = '1'::'2'::[] ;;
[21:16:59] <sceptic> чертовы французы
[21:21:18] <sceptic> А какой самый быстрый способ собрать из списка строку?
[21:23:28] <ermine> string.create (List.length list) и в цикле втыкать в строку
[21:26:42] <ermine> Array.iteri (fun i c -> str.[i] <- c) (Array.of_list lst)
не факт что быстрее будет
[21:27:03] <sceptic> А если String.concat "" stringlist ?
[21:27:30] <ermine> это список строк
[21:28:00] <ermine> а ты вроде хотел символы в строку собрать?
[21:28:33] <sceptic> да, я уже понял что string.concat не подходит.
[21:30:20] <sceptic> Так. Тогда следующий вопрос: что быстрее, вывести список символов или объединить их в строку и вывести её?
[21:31:32] <ermine> чем больше сисколов - тем тормознее
[21:31:49] <ermine> буферизовать надо
[21:32:38] <sceptic> вывод буфферизировать или уменьшать количество сиколлов?
[21:33:31] <ermine> ты ж не сказал, чем выводить собираешься
[21:34:17] <ermine> каналы из модуля pervasives буферизуют, туда можно посимвольно выводить
[21:58:01] <sceptic> А какая функция является точкой входа для программы на камле?
[22:03:00] <ermine> выполняются все топлевел функции с первой по последнюю
[22:13:52] <ermine> gds: заведи еще faq, вон уже задают часто задаваемые вопросы
[22:15:57] <sceptic> м... А String.split есть в коробке?
[22:18:58] <ermine> Str
[22:38:32] Typhon вошёл(а) в комнату
[22:43:56] <ygrek> String.nsplit в коробке extlib не использовать которую не стоит
[22:44:19] ygrek юзает vim на убогих системах где нет far'а
[22:45:15] <ygrek> ой, alien_of_decimal это случаем не из gcj?
[22:52:06] <sceptic> ygrek: ага, у меня на хацкеле решение, пытаюсь его на камль портировать.
[22:52:54] <sceptic> extlib?
[22:53:12] <ygrek> libextlib-ocaml-dev
[22:57:04] <ygrek> sceptic: у тебя в vcard префикс mrs?
[22:58:19] <sceptic> fixed
[23:03:21] sceptic уже знает кому надерёт уши за такой прикол.
[23:07:30] <gds> насчёт "быстрее всего собрать строку" -- неоднозначно. в случае, когда выделяем строку сразу, нужно знать её длину. то есть, получается два прохода по списку. интуиция подсказывает, что Buffer будет быстрее.
[23:07:58] <gds> ermine: вопросы -- про выполнение программы?
[23:08:28] <sceptic> про точку входа.
[23:38:42] <sceptic> А List.iter это типа foreach?
[23:39:57] <gds> как бы.
[23:40:27] sceptic думает, как бы сделать zipWith
[23:41:25] <gds> если я правильно понимаю, List.map2 это оно или около.
[23:42:17] <sceptic> спасибо, читаю
[23:43:36] <sceptic> по сигнатуре похож
[23:46:43] <gds> единственное, что неочевидно из сигнатуры, это работу со списками разной длины.
[23:48:58] <ygrek> если поведение не очевидно из сигнатуры - то это поведение - exception
[23:49:05] <ygrek> это ж камло
[23:51:15] <gds> не факт. почему бы не ограничиться map2 по списку с меньшей длиной, тоже вполне естественно.
[23:52:10] <ygrek> (забыл поставить тег <злобная сатира>)
[23:52:47] <gds> in soviet ocaml, the exception raises you.
[23:53:25] <sceptic> хм.. а string_of_int как нибудь сокращают?
[23:53:56] <gds> да. я предпочитаю "q", когда спешу.
[23:54:40] <sceptic> ааа, хочу type classes
[23:54:46] <gds> брось каку!
[23:54:49] <ygrek> printf "%i"
[23:54:58] <ygrek> sceptic: забаню
[23:55:14] <sceptic> не бейте грешного
[23:55:54] <ygrek> ладно, по первому разу
[23:56:10] <gds> банить -- бесчеловечно. А вот анафему наложить, или заговор на сайд-эффекты -- другое дело.
[23:56:24] <sceptic> :)
[23:56:38] <sceptic> эх..
[23:57:35] <sceptic> А что в них.. такого?
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!