[14:14:24] <kpmy> https://gist.github.com/kpmy/96c013706e5792da67f5
[14:14:33] <kpmy> всё же тернарный оператор это ужас какой-то
[14:14:48] <kpmy> мне он и в джаве не нравился
[14:18:42] <kpmy> истории успеха http://siliconrus.com/2015/07/grineva-interview/
[14:23:27] <geniepro> kpmy: r := x >= 0 ? r + x : r
тут норм
[14:23:41] <geniepro> kpmy: x := x >= 0 ? x < max ? x + 1 : -1 : -1
тут чота не то!!!
[14:24:13] <geniepro> так надо! x := x >= 0 ? (x < max ? x + 1 : -1) : -1
[14:24:49] <kpmy> скобки от ветра?
[14:25:12] <geniepro> точнее так: x := x < 0 ? -1 : x >= max ? -1 : x + 1
[14:25:36] <geniepro> без скобок твоё выражение это хер прочтёшь сходу
[14:25:58] <kpmy> на самом деле я просто не реализовал логическое И, поэтому пока так)
[14:26:10] <kpmy> два условия можно объединить
[14:26:27] <kpmy> но мне в целом не нравится, тернарный оператор какой-то асимметричный
[14:26:27] <geniepro> хотя конкретно тут надо так: x := x >= 0 & x < max ? x + 1 : -1
[14:26:35] <acidtech23> у вас какие наркотики?
[14:26:43] <geniepro> в чём ассиметричность? о_О
[14:26:44] <kpmy> советские
[14:27:08] <acidtech23> опиум
[14:27:42] <kpmy> ну типа, когда мы пишем x := x + 1 ? a : b то кажется, что присваиваем x + 1 а хвост уже не так обращает на себя внимание
[14:28:12] <kpmy> но конечно для связывания тернарных операторов в цепочку только так и можно поступить, писать условие впереди
[14:29:40] <geniepro> ну или как в хаскелле:
x = if x >= 0 then if x < max then x + 1 else -1 else -1
[14:31:05] <geniepro> в алголе-68 кроме if-then-else есть ещё сокращённая запись -- ваще хер поймёшь:
x := (x >= 0 | (x < max | x + 1 | -1) | -1);
[14:32:12] <acidtech23> вы не понимаете
[14:34:19] <kpmy> в целом, конечно, всего два варианта тернарного оператора, когда ? ставится после условия, и когда аналог знака ? ставится перед условием, типа if, но тогда это if и получается.
[14:35:38] <kpmy> это зло от того, что в декларативных языках всё кроме присваивания это expression, поэтому IF тут вообще не подходит
[14:37:23] <kpmy> у меня была идея сделать наоборот, x > 0 ? a : b -> x
[14:40:21] <geniepro> kpmy: ну так в принципе и было на заре программирования -- в планкалькуле (первом машинном ЯП), в рапире хотели так сделать
[14:40:56] <geniepro> но в декларативных языках чем ближе к математической нотации, тем, имхо, лучше
[14:46:52] <kpmy> ха, попробовал, мне даже понравилось
[14:47:22] <kpmy> https://gist.github.com/kpmy/96c013706e5792da67f5
[14:47:55] <kpmy> для компилятора даже проще такое разбирать
[14:48:06] <kpmy> всегда известен конец выражения
[14:48:53] <kpmy> декларативный язык должен быть непонятен!
[14:51:17] <geniepro> kpmy: можно попробовать заменить -> на >>=
[14:51:45] <kpmy> а можно на =:
[14:53:28] <kpmy> это уже было в Рапире
> В первоначальной версии языка оператор присваивания обозначался сочетанием символов ->, и порядок операндов в нём был противоположен привычному для большинства языков: слева записывалось вычисляемое выражение, а справа — имя переменной, которой результат вычисления присваивался. Такая форма оператора присваивания была сочтена более логичной, поскольку она лучше соответствует семантике операции: сначала вычисляется выражение, и лишь затем результат записывается в переменную. Однако впоследствии присваивание заменили на «классическое» :=, заимствованное из Алгола
[14:55:03] <geniepro> http://stackoverflow.com/questions/28139259/why-do-we-need-monads/28139260#28139260
Why do we need monads?
[14:56:12] <acidtech23> чото вы вообще не понимаете
[14:58:47] <acidtech23> в программировании не разбираетесь что то
[14:59:59] <geniepro> acidtech23: ты кто такой ваще? сиди в своём мусорном ведре и не высовывайся!!! #давайдосвидания
[15:00:12] <kpmy> бгг
[15:03:03] <acidtech23> святой отец
[15:10:40] <kpmy> монады нам нинада
[15:39:54] <acidtech23> совсем ослабели
[15:40:05] <acidtech23> программировать не умеете
[15:51:22] <kpmy> конечно, интересно получается, если у выражений нет порядка вычисления то автоматически приходится ограничивать присвоения, а если ограничить присвоения, то выражения тут же выстраиваются в естественный порядок сами по себе
[15:52:16] <kpmy> правда, возникает проблема дедлока если два неинициализированных значения зависят друг от друга
[15:52:56] <geniepro> у дейкстры условия в IF и DO имели недетерменированный порядок, надо было ему распространить эту недетерменированность и на присваивания!!! а он ниасилил такую ростую идею!!!
[15:53:25] <geniepro> kpmy> правда, возникает проблема дедлока если два неинициализированных значения зависят друг от друга
компилятор скажет: "Error! Loop!!!"
[15:53:31] <geniepro> простую*
[15:53:57] <kpmy> да, на уровне компилятора можно такие случаи ловить, наверное
[15:54:33] <kpmy> и тут как раз пригодятся регистры, типа внутреннее состояние юнита, инициализированные при входе
[16:38:59] <acidtech23> недоучки