Этого треда уже нет.
Это копия, сохраненная 23 декабря 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
#2 #875639
To do list: >>873057
>>876021
#3 #875645
Кложура же в лиспотреде обсуждается, в верблюд не нужен никому, просто Хачкиль-тред сделал бы.
#4 #875649
>>875645
Да ладно тебе, здесь же по идее обсуждают особенности функциАнальной парадигмы. Существуют различные функциональны языки для веба(elm, purescript). не вижу ничего плохого в обсуждении clojure и здесь. более того, можно обсуждать фп фичи в мейнстримных языках(c#, js..). нутыпонял
#5 #875653
>>875645
Еще к бамплимиту прошлого треда определились же, что самые обсуждаемые языки в треде - хаскель и кложурь. Кложурь настолько же лисп, насколько и то, что обычно называют "фп". А без эм-эля фп-тред пилить... как-то совсем странно. Так что все норм. К тому же тут общие вопросы можно обсуждать, а в треде про хачкель это бы странно смотрелось. Короче - все ок.
>>875662
34 Кб, 399x719
#6 #875657
>>875952>>878688
#7 #875661
Сами книги на рыгхосте зачем?

>>875645
Это.
>>875974
#8 #875662
>>875653

>определились


>самые обсуждаемые языки в треде


>кложурь


Сам же зафорсил в прошлом треде, сам же определился и сам же перекатил. Браво! 10 хитрых планов из 10.
>>875763
#9 #875668
двачую за кложурь, она тут нужна. Единственный нормальный функциональный лисп.
>>875686
65 Кб, 1440x860
#10 #875678
Beginning Haskell
Брал вот здесь
http://wayupload.com/pfsydsj2jlk7.html
>>875730>>875973
#11 #875686
>>875668

>Единственный нормальный функциональный лисп.


Ну а как же жаваскрипт?! Мммм? Давайте и его в шапку добавим.
#12 #875730
>>875678

>Инжиниринг магазина


Что, простите?
>>875776
#13 #875755
Поясните за котлин. Кроме андроеда - никуда?
>>875766
#14 #875763
>>875662
Таблетки прими, поехавший.
#15 #875766
>>875755
Ненужно. Вся суть котлина - это нескучные обои. Вообще, не рекомендую обращать внимания на языки, за которыми не стоит академического рисёрча или крупной корпорации.
#16 #875776
>>875730
На протяжении всей книги ты как-бы делаешь на Хаскеле интернет-магазин, продающий машины времени.
>>875783
#17 #875781
>>875637 (OP)
Аноны, подскажите что - нибудь почитать про фп. Не про синтакс отдельного языка, а чтобы вообще в целом и желательно на английском языке.
>>875821
#18 #875783
>>875776

>2016


>Хаскель IRL никому не нужен


>Используя машины времени перенесемся на 20 лет вперед и увидим, что функциональное программирование победило!


>2036


>Человечество уничтожено роботами


>Их ИИ написан на Javascript


>FUUUUUUUUUUUUUU

#19 #875821
>>875781
-> >>873057
Начни с введения в фп Харриса: http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/
Или sicp. У тебя какой уровень примерно?
>>876167
#20 #875866
4247 Кб, Webm
#21 #875867
>>876054
#22 #875872
>>875637 (OP)
Чё такое лямбда?
>>875873>>875883
#23 #875873
>>875872
Ононимнайа функцейа
>>875937
#24 #875880
>>875645
У верблюда больше применений в реальном мире, чем у хаскелля, с чего это он вдруг стал не нужен?
Благодаря фейсбуку скоро и фронтендеры на окамледиалект переходить начнут.
>>876333>>876455
#25 #875883
>>875872

>Чё такое лямбда?


Буква греческого алфавита.
>>875872

>Ононимнайа функцейа


Это вам большие знатоки ФП на джаве рассказали?
>>875885
#26 #875885
>>875883
А без талмуда теории по лямдбда калькулусу это как-то ещё описывается на языке простолюдинов? Посвяти уж.
>>875888>>875889
#27 #875888
>>875885
Ещё раз, λ - буква греческого алфавита. Без талмуда
#28 #875889
>>875885
Какой такой талмуд? В том же TaPL на весь нетипизированный лямбда калкулус страниц 20 наверное отводится.
Лямбда — это буква. Если тебе интересно, что такое лямбда-терм — так и спрашивай. Но в этом случае я отправлю тебя читать TaPL
>>875890
#29 #875890
>>875889

>Какой такой талмуд?


Барендрегт.
>>875891
#30 #875891
>>875890
Это для задротов PLT-теоретиков и математиков. Для software engineer'ов, коими в основном являются адепты ФП, такое чтиво бесполезно.
>>875892
#31 #875892
>>875891

> определение из javы для software enineerов не нравится


> литература для задротов не нравится


определись уже
#32 #875937
>>875873
Типо как в JS
() => {
return "блядь";
}
?
>>876055
#33 #875952
>>875657
Ну и что ты этим хотел сказать?
>>882911
#34 #875973
>>875637 (OP)
Что скажете об этой https://www.ohaskell.guide/pdf/ohaskell.pdf книге? Алсо залил >>875678 на рыгост http://rgho.st/6gSbS8pGz
>>875975
#35 #875974
>>875661

> Сами книги на рыгхосте зачем?


Тому что удобно
>>875976
#36 #875975
>>875973
Для тех, кто совсем не знаком с программированием или знаком очень поверхностно.
#37 #875976
>>875974
Зато курировать это затрахаешься.
Смысл делать из сосача флибусту?
#38 #876021
>>875639

>надо добавить книжки, переведенные нашим русско...


Пиздец говноедство!
#39 #876028
>>876021
Специально для тебя я добавил в шапку английские версии книг
#40 #876054
>>875867
Был бы я тян, я бы хотел, чтобыьон меня удочерил и выебал. Вадлер ван лав! Гив ит ап фор ве лямбдамен!
#41 #876055
>>875937
Почти.
#42 #876059
>>876021
Дебил, наше комьюнити перевело несколько самых мастрид книг по цс. Никто не заставляет тебя читать их на русском - просто это отличный список чтения.

Алсо, детектирую в тебе школьника, русофоба и латентного ватника.
#43 #876099
>>876021
Вот и объективные мнения подъехали...
#44 #876167
>>875821
Уровень джава макаки. Рекурсии последний раз писал в универе на лабах.
>>876182
#45 #876182
>>876167
А интерес теоретический (узнать, откуда все берется и как оно работает) или практический (начать писать более лучший код)?

Мне кажется, тебе больше подойдет или sicp, или htdp. Но второй совсем для начинающих, тебе будет скучно, наверное. Так что да, наверное лучше sicp. Писать можешь в plt racket, он сразу идет с простенькой, но удобной ide, зиро конфигурейшен.
>>876191>>882857
#46 #876191
>>876182
Посмотреть с функциональной стороны на код, что-то новое открыть для себя, ну и в планах перекат на эрланг или хаскель.
>>876208
#47 #876208
>>876191
Ну дак вкатывайся сразу в хаскель.
>>876238
#48 #876238
>>876208
"Cразу в хаскель" - совет уровня /б.))
Вкатываться буду в то, что будет популярным и востребованным.
#49 #876258
>>876238
У тебя есть гарантии, что хотя бы один фп язык станет мейнстримным? 10 лет назад никто не вспоминал про ФП, потом функциональные фичи начали добавлять в популярные языки. Нет уверенности, что нынешний интерес не угаснет. Я начал изучать ФП с хаскелля и тебе советую, в любом случае потом будет легче выучить любой функциональный язык. Если тебя интересуют карьерные возможности, то лучше либо закрыть этот тред, либо учить скалу, хоть это и мультипарадигменный язык и он тебе не даст той базы фп, которую мог бы дать хаск.
#50 #876263
>>876238

> что будет популярным и востребованным


Тогда что ты здесь делаешь? Хаскель никогда не будет популярным и востребованным. Если ты действительно хочешь "популярный и востребованный" язык, то тебе в питон/пхп/жс/жаба-тред
#51 #876277
>>876258
Спасибо, сейчас мне твой ответ показался более убедительным.
#52 #876279
>>876258

>учить скалу


Языки смысла нет "учить". Синтаксис отдельного языка при некотором опыте осваивается быстро.
По хорошему учат сами модели в общем и как оно работает. Но раз на Хаскеле легко понять всю функциональную кухню, то возьмусь за него.
#53 #876308
>>876238
неверно. ФП вообще сейчас в принципе не очень востребован, понимать его есть смысл лишь для "изменения чего-то в мозгу", чтобы применять это в других языках (тот же redux в жсе). Тут можно и сразу хаскель, ибо с ним это "изменение" произойдет максимально быстро. А после уже пиши на любом языке, каком хочешь.
#54 #876333
>>875880
фронтендер на clojure, заинтересовал синтаксис этого reason. Но по нем очень мало инфы. Меня, например, интересует интероп с js-ом. Есть какая информация? Или он еще WIP (коммиты не самые активные)?
>>876346
#55 #876346
>>876333

>Easy to use js_of_ocaml integration.


>Compiler from OCaml to Javascript.

sage #56 #876393
>>876258
Я бы советовал скалу тем кто уже работает с джавой (именно работает, а не просто знает). Изучать по отличной книге https://www.manning.com/books/functional-programming-in-scala. Не уверен что у неё есть аналог для хаскеля. Из-за FPiS я даже иногда думаю что скала может быть первым ФЯП, но на работе убеждаюсь в обратном.
>>876409
#57 #876409
>>876393
Чем она плоха?
>>876597
#58 #876455
>>875880

>Благодаря фейсбуку


Фєйсбук юзает Haskell
>>876466>>876470
#60 #876470
>>876481
#62 #876483
>>876481
Я где-то отрицал, что он юзает haskel?
309 Кб, 577x640
#63 #876559
Почему про зависимые типы и пруверы ничего в шапке нет?
>>876569
180 Кб, 1024x839
#64 #876569
>>876559

>пруверы

#65 #876597
>>876409
Это гибридный язык, изначально не предназначеный не для pure functional programming, а для взаимодействия с джавовой экосистемой. Из чего вытекает переусложненный (для ФП) синтаксис, сложная система типов, отсутсвиве контроля над эффектами и стандартных тайпклассов в стандартной библиотеке.
Подробнее: https://www.reddit.com/r/haskell/comments/1pjjy5/odersky_the_trouble_with_types_strange_loop_2013/cd3bgcu/
#66 #876631
Аононы, такой вопросик. Допустим надо разбить стрку произвольной длины на список строк фиксированной длины. Решение в лоб, которое я вижу - рекурсивно перебирать элементы строки и инкрементировать счетчик, счетчик достиг порога - добавляем строку в список, не достиг - делаем конкатинацию. Но как мне кажется решение по производительности не не очень оптимальное. Вот объясните, как можно решить задачу боле оптимальным способом, и какой у вас ход мыслей был при поиске решения. Хотелось бы в целом понять, разницу в мышлении функциональщика и императивщика. Я вот будучи закостенелым императивщиком привел решение скорее таки в императивном стиле.
>>876666
#67 #876652
chunk _ [] = []
chunk n list = chunked ++ chunk n dropped where chunked = take n list; dropped = drop n list

Как-то так, наверно, не проверял. В общем без счётчика можно обойтись, я думаю.
Вообще есть функция chunksOf :: Int -> [e] -> [[e]]
>>876670
10 Кб, 322x134
#68 #876666
>>876631
выше уже кинули решение в принципе
#69 #876670
>>876652
>>876666
Ок, спасибо. Я вот стал смотреть функции для работы со списками, а почему вы решили использовать take\drop, а не splitAt, например?
>>876675
#70 #876675
>>876670
take\drop как-то в первую очередь приходят в голову.

>>876666
Лол, честно не видел.
>>876685
#71 #876685
>>876675

> Лол, честно не видел.


это я к тому, что мое решение дублировало то, что выше) Но решение выше моего скрина не совсем верное из-за ++ вместо :

> Ок, спасибо. Я вот стал смотреть функции для работы со списками, а почему вы решили использовать take\drop, а не splitAt, например?


splitAt использовать конечно лучше. Другое дело, что take/drop - частоиспользуемые функции в разных ФЯП, а вот про splitAt я как не хаскельщик вообще не знал
#72 #876770
Подскажите еще пожалуйста, мы же можем

>chunks n list = chunk:chunks n rest


>where chunk = take n list


>rest = drop n list


заменить на

>chunks n = chunk:chunks n rest


>where chunk = take n


>rest = drop n


и соответсвенно на

>chunks n = chunk:chunks n rest


>where (chunk, rest) = splitAt n

>>876798
#73 #876798
>>876770
нет

> where chunk = take n


означает, что в chunk - функция [a] -> [a]. И вот ты склеиваешь эту функцию с (chunks n rest), где ты передаешь в chunks другую функцию [a] -> [a] (из rest). Возможно, такое можно как-то сделать через композицию, но имхо все усугубляет читаемость кода
#74 #877333
Еще такой вопросик. Я применяю функцию к аргументу типа с достаточно большим количеством именованных полей. Вот собственно как мне добраться до значения каждого поля? Типо только так?
myf (MyType {field1 = f1, field2 = f2}) = MyType {field1 = f1 + f2, field2 = f2 + f1}
Тогда получится, я больше развертку field1 = f1, field2 = f2, ... буду описывать, чем логику самой фукнции. Есть способ как-то это дело сократить?
#75 #877372
Здесь есть люди, которым нечем заняться и они готовы слушать мои метафизические маняидеи в попытке создания ИИ?
#76 #877459
>>877512
#77 #877460
>>877512
6 Кб, 200x153
#78 #877462
>>877372
Да, я только ради этого и держу этот тред в закладках
>>877512
#79 #877512
>>877459
>>877460
>>877462
И Вы будете помогать мне ради всеобщей цели всего человечества?
>>877522
#80 #877522
>>877512
Давай рассказывай уже
>>877557
#81 #877557
>>877522
Ну, я чуток стесняюсь да и мои идеи бредовые, я хорошо стукнулся головой.

Я думаю, что связи между нейронами в мозгу можно представить как грибницу. https://core.ac.uk/download/pdf/6117416.pdf здесь есть математическая модель развития мицелия. В купе с импульсными нейронными сетями это должно что-то дать по моему. Грибница разума.

Еще ИИ хорошо бы было дать возможность осознанных, то есть применять когда надо, когнитивных искажений. https://ru.wikipedia.org/wiki/Список_когнитивных_искажений

Особенно хорошим мне кажется, возможность заменять чувства, то есть https://ru.wikipedia.org/wiki/Синестезия

Но основное внимание я бы уделил языку. Когнитивная лингвистика, общая семантика. Шизофреники довольно часто любят создавать новые слова, которые кажутся бредовыми. Но есть такие языки, где надо создавать новые слова, такие явления, в частности называются инкорпорацией, агглютинацией и полисинтеизмом. Есть, например, язык Арахау. Или более известный, но тяжелый язык Ифкуиль. Кстати, язык Арахау построенный по архаической, то есть древней системе языков, фактически на чем-то вроде праязыка, есть такая гипотеза. И там, представьте себе, plus означает минус. Но не наоборот. Значит кто-то за всю историю поменял значение. Еще можете посмотреть расшифровки имен http://rbardalzo.weebly.com/names.html

У аутистов есть некая привязанность к объектам. То есть, тебе говорят что-то вроде кактуса, а тебя самого даже чуть покалывает. Но это подобно чуть к синестезии. Кстати, есть такая фоносемантика, так она изучает само звуковое строение слова и то как оно влияет на восприятие человека. Я даже часто замечаю на себе, что часто излишне импульсивен и сужу по информации по проигрыванию в себе некой пластинки с ней и таким образом строя несложную ментальную модель, то есть, в том смысле, почему люди дали именно такое название тем или иным событиям, явлениям, предметам. К слову, довольно таки неплохо получается.В этом ключе мне нравится некая комбинация фоносемантики и теории очевидностей https://ru.wikipedia.org/wiki/Теория_Демпстера_—_Шафера

Еще как-то полезно бы где-то найти различные ментальные модели в различных ситуациях. Что-то вроде, ты знаешь, что такое биологическая эволюция, значит можешь и представить себе, что такое эволюция звезды.

Про зеркальные нейроны я сейчас изучаю. Но первое, что пришло в голову это посмотреть конструкцию термоядерной бомбы и как там зеркало помогает фокусировать. Ну, и совсем очевидные, хоть и вряд-ли правильные это зеркала для комнаты смеха, механизм проецирования. А дальше уже строить линзы, очевидно же. Хотя это просто, скорее, принцип фонаря или как там, то есть куда проще, туда и идти. Была вроде доля шутки, где алкоголик не хотел искать кольцо, там где не было фонаря, ибо там темно. Да-да, очень смешно, ага-ага.

Кстати, на днях пришла мысль о распознавании изображений. Применять туда фрактальное сжатие. Патенты на алгоритмы уже истекли. А ранги фрактального сжатия довольно неплохо по мне подходят для многослойного распознавания.

Впрочем, я довольно таки недавно ударился головой, да и я теоретик-хеллоувордщик, так, что пожалуйста не бейте сильно. Даже может бы книжку какую-то умную дали. Большинство людей говорит, что то, что я пишу это шизофазия.
#81 #877557
>>877522
Ну, я чуток стесняюсь да и мои идеи бредовые, я хорошо стукнулся головой.

Я думаю, что связи между нейронами в мозгу можно представить как грибницу. https://core.ac.uk/download/pdf/6117416.pdf здесь есть математическая модель развития мицелия. В купе с импульсными нейронными сетями это должно что-то дать по моему. Грибница разума.

Еще ИИ хорошо бы было дать возможность осознанных, то есть применять когда надо, когнитивных искажений. https://ru.wikipedia.org/wiki/Список_когнитивных_искажений

Особенно хорошим мне кажется, возможность заменять чувства, то есть https://ru.wikipedia.org/wiki/Синестезия

Но основное внимание я бы уделил языку. Когнитивная лингвистика, общая семантика. Шизофреники довольно часто любят создавать новые слова, которые кажутся бредовыми. Но есть такие языки, где надо создавать новые слова, такие явления, в частности называются инкорпорацией, агглютинацией и полисинтеизмом. Есть, например, язык Арахау. Или более известный, но тяжелый язык Ифкуиль. Кстати, язык Арахау построенный по архаической, то есть древней системе языков, фактически на чем-то вроде праязыка, есть такая гипотеза. И там, представьте себе, plus означает минус. Но не наоборот. Значит кто-то за всю историю поменял значение. Еще можете посмотреть расшифровки имен http://rbardalzo.weebly.com/names.html

У аутистов есть некая привязанность к объектам. То есть, тебе говорят что-то вроде кактуса, а тебя самого даже чуть покалывает. Но это подобно чуть к синестезии. Кстати, есть такая фоносемантика, так она изучает само звуковое строение слова и то как оно влияет на восприятие человека. Я даже часто замечаю на себе, что часто излишне импульсивен и сужу по информации по проигрыванию в себе некой пластинки с ней и таким образом строя несложную ментальную модель, то есть, в том смысле, почему люди дали именно такое название тем или иным событиям, явлениям, предметам. К слову, довольно таки неплохо получается.В этом ключе мне нравится некая комбинация фоносемантики и теории очевидностей https://ru.wikipedia.org/wiki/Теория_Демпстера_—_Шафера

Еще как-то полезно бы где-то найти различные ментальные модели в различных ситуациях. Что-то вроде, ты знаешь, что такое биологическая эволюция, значит можешь и представить себе, что такое эволюция звезды.

Про зеркальные нейроны я сейчас изучаю. Но первое, что пришло в голову это посмотреть конструкцию термоядерной бомбы и как там зеркало помогает фокусировать. Ну, и совсем очевидные, хоть и вряд-ли правильные это зеркала для комнаты смеха, механизм проецирования. А дальше уже строить линзы, очевидно же. Хотя это просто, скорее, принцип фонаря или как там, то есть куда проще, туда и идти. Была вроде доля шутки, где алкоголик не хотел искать кольцо, там где не было фонаря, ибо там темно. Да-да, очень смешно, ага-ага.

Кстати, на днях пришла мысль о распознавании изображений. Применять туда фрактальное сжатие. Патенты на алгоритмы уже истекли. А ранги фрактального сжатия довольно неплохо по мне подходят для многослойного распознавания.

Впрочем, я довольно таки недавно ударился головой, да и я теоретик-хеллоувордщик, так, что пожалуйста не бейте сильно. Даже может бы книжку какую-то умную дали. Большинство людей говорит, что то, что я пишу это шизофазия.
#82 #877559
>>877557
Кстати, я думаю, что есть некий круговорот информации в природе. То есть, как круговорот воды, но информации.
>>878696
#83 #877569
>>877557

>Даже может бы книжку какую-то умную дали.


В ОП-посте в принципе список книг есть, можешь начать с "Learn You a Haskell for Great Good". Очень неплохая книга для новичка.
#84 #877689
>>877557

>Я думаю, что связи между нейронами в мозгу можно представить как грибницу. https://core.ac.uk/download/pdf/6117416.pdf здесь есть математическая модель развития мицелия. В купе с импульсными нейронными сетями это должно что-то дать по моему. Грибница разума.



У грибов нет подразделения клеток на рецепторные или мышечные и т.д.
Математическая модель роста гриба обеспечивает ему лишь равномерное распространение тела в гумусе, для лучшего поиска питательного вещества. Это мог бы быть и фрактал, если бы шанс нахождения питательных вещест был больше.

На самом деле можно было бы построить нейронную модель ленточного червя, ибо они пиздец какие протые и пиздец как хорошо изучены и пытаться модернизировать как-то.

>Про зеркальные нейроны я сейчас изучаю. Но первое, что пришло в голову это посмотреть конструкцию термоядерной бомбы и как там зеркало помогает фокусировать. Ну, и совсем очевидные, хоть и вряд-ли правильные это зеркала для комнаты смеха, механизм проецирования.



Зеркала == отражатели. Типо испускаемую энергию направлять обратно, типо для "самовозгарания", йопта.
>>878049
#85 #877748
У меня бэкграунд джавовский, сейчас полгода пишу на скале и пытаюсь перестроить голову на фп. И вот я не понимаю, как классическую схему с контроллерами, сервисами и репозиториями перенести на фп.
Предположим у нас есть контроллер, который вызывает сервис, который делает какую-то логику, сохраняет сущность в репозиторий, генерирует ивент, отсылает письмо на почту. Т.е. делает три сайдэффекта. Сайдэффектами мы с помощью монад управляем. Ок, но у меня монады же разные. Типа DbMonad, EmailMonad, еще какая-нибудь монада.
Видел варианты решения с трансформированием монад, вариант возвращать функцию, а не монаду и где-то на самом верху эту функцию вызывать. Но если у меня монады не могут трансформироваться одна в другую? В скале в принципе все к фьючур трансформировать можно так или иначе, но если я не хочу фьючур. Или, если лямбды возвращать, то в итоге нехуевый такой граф зависимостей для лямбды наверху может получиться, что не есть гуд.
В ооп все просто было - заинжектил зависимость и хуяришь, а тут пока все способы не выглядят многообещающе. Есть что почитать, посмотреть на эту тему?
>>877760
#86 #877760
>>877748
У тебя как-то все смешано.
В spray/akka-http, например, тебе нужно построить роут, передавая свои функции в функции routing-dsl'я. Тут все функционально, причем не важно что эти функции делают на самом деле.
Я не уверен что ты правильно понимаешь что такое трансформирование монад. Это не преобразование одной монады в другую, а их композиция. В результате такой себе стек монад получется.
Future действительно неудачное представления сайд-эффектов, используй scalaz.Task если можешь.
Инжекшн зависимостей вообще не имеет отношения к тому о чем ты говорил, делай его через конструктор (возможно через имплисит параметры), и всего делов.

>Есть что почитать, посмотреть на эту тему?


Вот немного:
про трансформеры: https://www.youtube.com/watch?v=hGMndafDcc8
про архитектуру: http://degoes.net/articles/modern-fp-part-2
про работу с бд: https://www.youtube.com/watch?v=7xSfLPD6tiQ
Последнее видео вообще хорошо показывает чем хорошо ФП.
>>877769>>877783
#87 #877769
>>877760
Благодарю
36 Кб, 450x357
#89 #877895
Есть два типа заявок - Active и Backup. Есть очередь, в которую можно закидывать заявки в произвольном порядке, но извелкать из очереди нужно либо заявки типа Active, в той последовательности, в которой они приходили, либо заявки Backup, в той последовательности, в которой они приходили, либо независимо от типа заявки, но опять же в той последовательности, в которй они приходили. Делаю типо очередь элементов, каждый из которых содержит очередь заявок типа Active и следующий элемент, который содержит очередь заявок типа Backup и следующий элемент, который содержит и т.д. При добавлении допустим заявки типа Active - "проваливаемся" в самый последний элемент с заявками типа Active и добавляем заявку в очередь. При извлечении допустим заявки типа Backup - "проваливаемся" в первый элемент с заявками типа Backup и извлекаем заявку из очереди. Получается как-то так, ("проваливаемся" в последний элемент с заданным типом заявок):
data RequetsType = Active | Backup
data QQueue a = Nil | QQueue RequetsType [a] (QQueue a)

qlast :: RequetsType -> QQueue a -> QQueue a
qlast Active z@(QQueue Active q Nil) = z
qlast Backup z@(QQueue Backup q Nil) = z
qlast Active z@(QQueue Active q (QQueue Backup q1 Nil)) = z
qlast Backup z@(QQueue Backup q (QQueue Active q1 Nil)) = z
qlast Active (QQueue _ _ qq) = qlast Active qq
qlast Backup (QQueue _ _ qq) = qlast Backup qq

Я совсем наркоман или норм? Может конечно есть готовые контейнеры под задачу, но вот так навскидку не нашел.
#90 #877950
Блядь, зачем фейсбук пилит reason? Я только-только освоился с пюрэхаскеллями, до меня наконец-то дошла прелесть контроля эффектов — но из-за появления reason я не знаю, куда прикладывать усилия.
С одной стороны, сложная йоба, которая компилируется только в ЖС. Но с сайд-эффектами, нормальной do-нотацией и в более-менее стабильном состоянии.
С другой стороны более простая йоба, которая компилируется в ЖС и ОКамл, к тому же развивается книгой. Но еще WIP, без чистоты, с прилепленной сбоку пародией на do-нотацию. И как там дела с квикчеком/генеративными тестами?

Я в лимбе, блядь. Тру-ФП уже готово для веба, но пока не ясно, какое из них брать.

Анон, куда сам сядешь, куда SPJ посадишь?
>>877988>>879438
#91 #877985
>>876666
Два прохода по списку, ну-ну.
#92 #877988
>>877950
Учитывая, что лицорукакнига набрала команду компилер-девелоперов (которые и пилят всю эту йобу) только из-за того, что не хотела уволнять пхп-девелоперов, логично предположить, что ризон она пилит по той же причине. Короче, я бы подождал пару лет минимум.

Алсо, как у него с интеропом?

Через десять лет слова "мл-лайк лангуаж" будут вызывать те же чувства, что сейчас вызывают "си-лайк лангуаж".
>>877995>>877997
#93 #877995
>>877988

>только из-за того, что не хотела уволнять пхп-девелоперов


В этом есть что-то плохое? Девелоперов сохранили, да и сам пхп стал лучше, чем 5 лет назад в том числе благодаря книге — сплошной шин же.

>Алсо, как у него с интеропом?


На одном уровне с пюрэ. Разве что с документацией BuckleScript придется чуть-чуть ознакомиться.

>external now : unit => int = "Date.now" [@@bs.val];


И кроме всего прочего, в ризон уже реализовали JSX. Если бы JSX и встроенные опциональные аргументы был в пюрэ — я бы даже не задумывался о выборе языка, а то читать списки списков как-то все не привыкну.
>>878016
#94 #877997
>>877988

>Алсо, как у него с интеропом?


Оно компилируется в обжектив верблюда, у которого есть компиляторы в жс, жяву, натив и собственный байткод.
Нутыпонел.

>мл-лайк лангуаж


А что не так-то? Прекрасный синтаксис. Хочешь фичастости — всякие GADT и модули пофичастее чем в хаскеле, хочешь быстрый код — пиши циклы с указателями.
>>878016
#95 #878002
>>875637 (OP)
Аноны, что там сейчас из библиотек/фреймворков хаскеля для GUI используют? Или это моветон писать такое на нем?
>>878009
#96 #878009
>>878002

>это моветон


Это. На хачкелле можно писать только кластеры метапарадигм.

Если по теме — https://wiki.haskell.org/Applications_and_libraries/GUI_libraries

Если хочешь имхоты — возьми WPF, там даже F# есть (мл-потобная залупка, хоть и с уклоном больше в сторону ооп) и наслаждайся жизнью.
#97 #878016
>>877995

> шин же


Шин-то может и шин, но от компании, которая переписывает компилятор языка из-за того, что у них сайт на этом языке тормозит, можно ожидать чего угодно. Сегодня пилят, завтра не пилят. Ненадежно.

>>877997
Вейт, вот? Даже так? В жс через окамл? По-моему это все игрушки и ненужно короче, с ффи заебетесь.

Я не про синтаксис, а про то, что сейчас ПАТТЕРНЬ МЯЧИНГ и ТИИИПЫЫЫЫ - это модно, и языки штампуются (и будут штамповаться) бездумно и безыдейно, а через десять лет всю эту кучу говна придется разгребать. В этом смысле хачкель ничем не лучше крестов или джавы.
>>878023>>878242
#98 #878023
>>878016

>Сегодня пилят, завтра не пилят. Ненадежно.


Да похуй абсолютно, лол.
Во-первых — там весь проект состоит из замены кейвордов и различных скобочек с символами на окамловские. Даже если что-то поломается - проект небольшой, исправить не сложно.
Во-вторых — у тебя конечно сплошной фейсбук, который однажды переписав на новый модный и красивый язык/фреймворк - и все, пиздец.

>с ффи заебетесь


Ну всякие скалажс и кложаскрипты живут же.

>это модно, и языки штампуются (и будут штамповаться) бездумно и безыдейно


До этого было то же самое — все копаются в жяве и крестах и живы, здоровы хотя про здоровье не факт, лол.

>хачкель ничем не лучше крестов или джавы


По такой логике вообще все языки говно и нахуй вообще жить - через десяток лет устареем и станем легаси на свалке исторри.
>>878026>>878118
#99 #878026
>>878023

> вообще все языки говно


А ты понял суть
#100 #878049
>>877689
Так и цифровые нейросети рецепторы воспринимают дискретно, проходя через АЦП. К слову, мицелий все-равно может чувствовать боль, в том смысле, что реагировать. То есть, восстанавливаться после некоторых разрушений, хоть и не как нервная сеть и не всегда. Впрочем, думаю, что добавить некоторые чувствительные конечности в цифровом виде было бы не слишком сложно. А затем модулировать и передавать по нитям. Впрочем, вряд-ли я сказал что-то нормальное. А мышечные, тут надо подумать. Судя по всему для мицелия нужны некоторые санитары, прочищать забитые пути, старые стереотипные... Нет, усложнение. Я пытаюсь достичь в этом плане некоя вибрация нитей, мозги кипят, путь на стороне листа понятен.

>Математическая модель роста гриба обеспечивает ему лишь равномерное распространение тела в гумусе, для лучшего поиска питательного вещества. Это мог бы быть и фрактал, если бы шанс нахождения питательных вещест был больше.


А разве нейроны в человеческом мозгу не есть на некой нейроглии, которая и питает ее? Взять вместо нейроглии некий гумус. Или это совсем бред, как и все остальное? Фракталы вроде бы даже и не есть каким-то противоречием, скорее всего http://studopedia.org/4-153326.html
Впрочем, думаю, что фрактал нужно представлять и мыслить фракталами уже уровне чуть выше за этот. Но не слишком и высоко, конечно. К примеру, как некая мозаика даже. То есть, если отдельно нейрон может распознавать символ, то кому это интересно? Но если сам по себе нейрон ничто, но собираясь в группы, но самостоятельно, а не жестко. Я уже писал о фрактальном сжатии изображений. Да сети Кохоненна, но все-же это не то, что требуется.

Я, кстати, сейчас пытаюсь изучать формирование нервной системы в состоянии эмбриона и кажется, что это опять подходит под грибы. Но в этом случае под грибок. Такие пузыри на грыбке. Интересно, есть ли математическая модель развития грибка на различных животных. Кстати, посмотри вот http://elibrary.ru/item.asp?id=22134417
На основании полученных результатов, установлена биологическая ценность активных пептидов гидролизатов коллагена чешуи и.рациональность их сочетания с пчелиной пыльцой. Предложен состав гейнера для спортивного питания, обоснованы рекомендации по его применению. Забавно, не так ли? При чем тут спортивное питание? Ну, чуть синкретизации и ты войдешь в мой ход мыслей. Но и я хотел бы почерпнуть твои ментальные модели. Например, как ты в голове держишь последовательность целых чисел, десятичных и так далее. Используешь ли ты мнемотехники и так далее. Мне плохо в этом понимании. Я целый день хожу как овощ, думал, что ответить тебе, но сейчас мне ударил мощный импульс и мысли, ассоциации довольно странные, остальное, хлынуло-подпрыгнуло в голову. Вспоминается тот странный парень по имени, что-ли, Иешуа из Кин-дза-дза.

Расскажи, пожалуйста, о ленточных червях. Очень интересно, как я понимаю это не те ребята, то есть, грибы что ими занимаются проектом OpenWorm? У них вроде червь нематода. В чем преимущество ленточных червей в этом плане перед червяком нематоды?

Да, с зеркалами вообще тупо. Собственно, может даже скорей и именно линзы. Но отражатели, сразу вспоминаешь Алису в стране чудес. Такой себе, тоже процесс мыслей можно проследить и своебразная странная
эмпатия нового уровня. Тут может даже нужны и зеркальные пазлы с 4D-печатью и даже больше измерений, лол.
Шучу. Но зеркальные нейроны довольно хорошая вещь.

Я вообще не понимаю, что со мной делается. Мышление стало каким-то импульсивным и очень переносится на бессознательное. Я могу слушать незнакомый текст на не знакомом языке по незнакомой теме и включая у себя пластинку начинать его и ее понимать. Такая фоносемантика, теория очевидностей, как я уже говорил. Я думаю, что ИИ, как уже говорил, должен применять во многом бессознательное, как сознательное. То есть даже применять когнитивные искажения. Я довольно много манипулировал людьми и осознал, что во многом они даже сказанную мною мысль нечайно как-бы поза кадром будут воспринимать, как свою собственную. Не говоря уже об ожидаемости, но меня много иллюзии забавляют или мучают. Некая вешалка, сапог, одежда кажется сидящим человеком. Могу увидеть в скрепках и бумаге довольно детальную куклу. Еще постоянно эти оклики. Странные штуки. Боюсь сойти с ума, может я уже пишу бред, но врачи мне говорили, что я просто невротик. Не знаю зачем я это написал, может хотел высмеятся.
#100 #878049
>>877689
Так и цифровые нейросети рецепторы воспринимают дискретно, проходя через АЦП. К слову, мицелий все-равно может чувствовать боль, в том смысле, что реагировать. То есть, восстанавливаться после некоторых разрушений, хоть и не как нервная сеть и не всегда. Впрочем, думаю, что добавить некоторые чувствительные конечности в цифровом виде было бы не слишком сложно. А затем модулировать и передавать по нитям. Впрочем, вряд-ли я сказал что-то нормальное. А мышечные, тут надо подумать. Судя по всему для мицелия нужны некоторые санитары, прочищать забитые пути, старые стереотипные... Нет, усложнение. Я пытаюсь достичь в этом плане некоя вибрация нитей, мозги кипят, путь на стороне листа понятен.

>Математическая модель роста гриба обеспечивает ему лишь равномерное распространение тела в гумусе, для лучшего поиска питательного вещества. Это мог бы быть и фрактал, если бы шанс нахождения питательных вещест был больше.


А разве нейроны в человеческом мозгу не есть на некой нейроглии, которая и питает ее? Взять вместо нейроглии некий гумус. Или это совсем бред, как и все остальное? Фракталы вроде бы даже и не есть каким-то противоречием, скорее всего http://studopedia.org/4-153326.html
Впрочем, думаю, что фрактал нужно представлять и мыслить фракталами уже уровне чуть выше за этот. Но не слишком и высоко, конечно. К примеру, как некая мозаика даже. То есть, если отдельно нейрон может распознавать символ, то кому это интересно? Но если сам по себе нейрон ничто, но собираясь в группы, но самостоятельно, а не жестко. Я уже писал о фрактальном сжатии изображений. Да сети Кохоненна, но все-же это не то, что требуется.

Я, кстати, сейчас пытаюсь изучать формирование нервной системы в состоянии эмбриона и кажется, что это опять подходит под грибы. Но в этом случае под грибок. Такие пузыри на грыбке. Интересно, есть ли математическая модель развития грибка на различных животных. Кстати, посмотри вот http://elibrary.ru/item.asp?id=22134417
На основании полученных результатов, установлена биологическая ценность активных пептидов гидролизатов коллагена чешуи и.рациональность их сочетания с пчелиной пыльцой. Предложен состав гейнера для спортивного питания, обоснованы рекомендации по его применению. Забавно, не так ли? При чем тут спортивное питание? Ну, чуть синкретизации и ты войдешь в мой ход мыслей. Но и я хотел бы почерпнуть твои ментальные модели. Например, как ты в голове держишь последовательность целых чисел, десятичных и так далее. Используешь ли ты мнемотехники и так далее. Мне плохо в этом понимании. Я целый день хожу как овощ, думал, что ответить тебе, но сейчас мне ударил мощный импульс и мысли, ассоциации довольно странные, остальное, хлынуло-подпрыгнуло в голову. Вспоминается тот странный парень по имени, что-ли, Иешуа из Кин-дза-дза.

Расскажи, пожалуйста, о ленточных червях. Очень интересно, как я понимаю это не те ребята, то есть, грибы что ими занимаются проектом OpenWorm? У них вроде червь нематода. В чем преимущество ленточных червей в этом плане перед червяком нематоды?

Да, с зеркалами вообще тупо. Собственно, может даже скорей и именно линзы. Но отражатели, сразу вспоминаешь Алису в стране чудес. Такой себе, тоже процесс мыслей можно проследить и своебразная странная
эмпатия нового уровня. Тут может даже нужны и зеркальные пазлы с 4D-печатью и даже больше измерений, лол.
Шучу. Но зеркальные нейроны довольно хорошая вещь.

Я вообще не понимаю, что со мной делается. Мышление стало каким-то импульсивным и очень переносится на бессознательное. Я могу слушать незнакомый текст на не знакомом языке по незнакомой теме и включая у себя пластинку начинать его и ее понимать. Такая фоносемантика, теория очевидностей, как я уже говорил. Я думаю, что ИИ, как уже говорил, должен применять во многом бессознательное, как сознательное. То есть даже применять когнитивные искажения. Я довольно много манипулировал людьми и осознал, что во многом они даже сказанную мною мысль нечайно как-бы поза кадром будут воспринимать, как свою собственную. Не говоря уже об ожидаемости, но меня много иллюзии забавляют или мучают. Некая вешалка, сапог, одежда кажется сидящим человеком. Могу увидеть в скрепках и бумаге довольно детальную куклу. Еще постоянно эти оклики. Странные штуки. Боюсь сойти с ума, может я уже пишу бред, но врачи мне говорили, что я просто невротик. Не знаю зачем я это написал, может хотел высмеятся.
#101 #878051
>>878049
Забыл дописать, что дабы сойти с ума нужен ум. Да и самоорганизация невозможна без энтропии. Тут сразу вспоминается химический катализ и его связь с информатикой, то есть такая научная работа была на Киберленинке. Довольно таки популярное решение где-то в 60-х годах, но теперь нет. Да и пролог уже не очень используют.
>>879377
#102 #878056
>>876466
Фу блядь. Reason - это такой тайпскрипт с очень хуёвым синтаксисом.
>>878057>>878061
#103 #878057
>>878056
Лол.
#104 #878060
В детстве какие-то странные информационные потоки вливались в меня. Я даже активно видел Дом 2 на украинском. В мой код, я начинаю замечать, записано выражение мамы о том, что надо сделать ритуал, если ты сказал что-то вроде "черт побери". Дабы черти покинули хату. А еще Кин-дза-дза, я помню с детства лишь тот кадр, где ведут парня в желтых штанах, которого я воспринял за Иисуса. Я смотрел сериал Универ и шоу долгоносиков. Первый я смотрел под влиянием своей двоюродной сестры, я делал на телефоне нокия сайт из таких рамок, разных линий _. Сайт для универа, папиных дочек да разные там эти, мне наверное нравилась сама картинка происходящего. А телепузиков я всегда боялся. Черный бумер, скрытые сигналы детей, которые хотят попробовать коноплю, но не знают про опиодные рецепторы и не могут ее достать. И когда я перевелся, почему? Я сам странно вел... девочка повела меня за какие-то кирпичи и захотела поцеловаться. Это было в первом классе, я ничего не понимал. Меня спрашивали кем я буду, каким военным, сказали сказать моряком. Учительница сказала мне так ответить, а потом это распостраняли. Но я не хотел быть военным. На детских фотографиях я был безчувственным и излишне над людьми, но когда я был возле растений я чувствовал себя радостным. Но возле дома напротив дедушки и бабушки росли грибы, я считал их вредными и уничтожил. Я даже уничтожил мицелий. Они больше не росли. Я уничтожал грибы, что росли на деревьях вверху такие большие, я не знаю деревья, их названий. Но зачем откопали елочку возле моего дома мама и отдала ее посадить возле церкви? Ее никто не подливал и она засохла. Она верила, что быть слишком выше дома это плохо.
>>879377>>879396
#105 #878061
>>878056
Хуёво ты его родословную изучил особенно учитывая что напрямую в жс оно не компилится.
#106 #878078
>>875637 (OP)
каму нахуя нужна ваще функцинальное прогрммирование)) когда есь ламповая джава)

ващи хаскели не для реального мира, то что там на хачкеле три.5 парсеркомпинатора написале не делаит его приготным для биснеза))

окамл ваще наверно умир

мима джава царина
#107 #878118
>>878023

> Да похуй


Ну блин, там кто-то выше по треду кричал аллилуйя, мол труфп ин да браузер - а на деле это какой-то ненужный кусок говна уровня детского конструктора.

Твое "во-вторых" я вообще не понял, у тебя там предложение не согласовано - хуй знает, что ты сказать хотел, вот често, извини.

Скалажс не живет. В кложурскрипте нет ффи, там изначально язык дизайнился с прицелом на симлесс интероп с хост-платформой.

> До этого было то же самое


Тхиз, я как раз об этом.

> все языки говно и нахуй вообще жить


Ветс ма бой!

На самом деле все языки хороши, пока занимают ту нишу, для которой они предназначались.
#108 #878242
>>878016

>переписывает компилятор языка из-за того, что у них сайт на этом языке тормозит


Ризон они пилят, потому что синтаксис им не нравится. То ли жабаскриптеры неосиливают писать -> вместо =>, то ли хрен его знает. Вот в этом случае лучше бы они действительно компилятор окамла переписали. Со всем тулингом. И библиотеками.
>>878264>>878339
#109 #878264
>>878242

> Ризон они пилят, потому что синтаксис им не нравится


Вообще не понимаю этой хуйни. В эмелях же самых хуёвый синтаксис эвар, что-то типа паскаля, только всерьёз. Вот бля, я и джаваскриптовый синтаксис люблю, и хаскельный, и скальный (пока не начинается scalaz), но эмельный это же очевидная говнина говнин, просто ёбаный уродливый мусор, как его можно любить за что-либо? Он хуёвый, с какой стороны ни посмотри, что для писания, что для читания.
>>878267>>878339
#110 #878267
>>878264
Если ты про смлный, то я с тобой согласен, хотя там всё не так плохо, как ты рисуешь. В окамле же всё заебись с синтаксисом. Разве что begin и end можно было заменить на фигурные скобочки, потому что писать лень, смотрится так себе, а обычные скобки хрен увидишь. Тут дело в том, что они в итоге сделали ещё хуже, чем было.
>>878276
#111 #878276
>>878267
Бля, я в глаза проебался. В ризоне заебись синтаксис, это в окамле говно.
Единственное что неоч - это лямбды:
js: let f = x => y => x + y
reason: let f = fun x => fun y => x + y
>>878285
#112 #878285
>>878276
можно убрать лишний fun
let add = fun a b => a + b;
#113 #878294
Лямбда, тебе не надоело пропагандировать функциональщину?
>>878321
#114 #878321
>>878294
не))
#115 #878339
>>878242
Ниасилили.

>>878264
В хаскеле мльный синтаксис как бы.
>>878392
#116 #878369
Вот нахуй хаскелл сделали с уебанским двумерным синтаксисом, идиотизм же.
>>878392
12 Кб, 303x125
#117 #878392
>>878339

> В хаскеле мльный синтаксис как бы.


Лол, нет.
>>878369
Завидуй молча.
>>878394>>878397
#119 #878397
>>878392
Хачкиль все относят к мл-семейству. Просто там сахарком посыпали, и стало не так похоже.
>>878401
#120 #878401
>>878397
В эмелях нельзя сделать where, потому что порядок вычисления императивный.
Некоторые учоные это считали настолько важным что даже писали про это статьи в духе "The next 700 programming languages":
http://www.inf.ed.ac.uk/teaching/courses/epl/Landin66.pdf
#121 #878404
>>878401

> порядок вычисления императивный.


думаю ты просто ошибся, но на всякий случай, энергичность вычислений != императивность
>>878410
#122 #878408
>>878401

>В эмелях нельзя сделать where


Да как нефиг делать. Просто трансформируй в let первым проходом по аст. А если так хочется ленивости (или будут проблемы с перекрёстными дефинишонами), то всегда можно обернуть в функцию.
>>878412
#123 #878410
>>878404
Здесь слово "императивный" лучше подходит. Суть в том, что стейтменты вычисляются друг за дружкой и биндинги - не исключения. Введение связывания/переменной - это стейтмент, который должен участвовать в этой императивной очереди выполнения строчек и должен предшествовать строчкам где это связывание будет использоваться. Эмели со своими let-ами здесь ничем не отличаются от сишек или джаваскриптов.
>>878417>>878418
#124 #878412
>>878408
Ты просто задумайся о схеме такого преобразования.
Например,
f x = if x > 10 then y else z
where
y = longComputation1
z = longComputation2
Будут ли леты перед if, или внутри then-else?
А это только самый банальный пример, даже без сайдэффектов.
>>878417
#125 #878417
>>878410
Куда-то не туда тебя несёт, по-моему. В том же хаскиле ты не можешь вычислить a + b не вычислив полностью всё, от чего зависят a и b. И вычисляться они будут ровно так же по очереди как и в мле.
>>878412

>Ты просто задумайся о схеме такого преобразования.


Задумался, всё нормально.

>Будут ли леты перед if, или внутри then-else?


А это не важно. Во-первых, можно объявить where синтаксическим сахаром для let, а там пусть сами ебутся. Во-вторых, можно во время компиляции обернуть их в лямбду без (ок, с одним) аргументов и получить ту же самую семантику. Преобразование тривиальное, даже пандорический захват не надо делать.
>>878421
#126 #878418
>>878410
Хаскельские let in и where это просто синтаксический сахар вместо подстановки значений в лямбду, это даже не биндинг.
>>878421
#127 #878421
>>878417

> можно во время компиляции обернуть их в лямбду без (ок, с одним) аргументов и получить ту же самую семантику.


Какую ту же самую, ты ебанутый?
Если ты обернёшь их в санки, не мемоизирующие результат, ты получишь call-by-name
если ты обернёшь их в санки, мемоизируищие результат, ты получишь call-by-need,
как в хаскеле, только неоптимизированный.
Вот так вот вводя "незначительный сахарок" ты незаметно сделал язык ленивым.
>>878418
Ты отвечаешь на пост в котором ничего не говорится про хаскельный let.
В эмелях другой let, в котором синтаксическая позиция и порядок вычислений неразрывно связаны.
#128 #878428
>>878421
Я о том, что в хаскеле вообще нет биндинга, а если был бы, он бы работал так же само как и в мле, в котором он есть.
>>878431
#129 #878431
>>878428
В широком смысле под биндингом понимают просто синтаксическое введение имени, независимо от того, во что оно там скомпилируется и как будет работать.
>>878441
#130 #878439
>>878401
В эмелях можно сделать вхере.

Более того, это не имеет никакого отношения к тому факту, что у хаскеля мл-лайк синтаксис. Вообще никакой связи.
>>878466
#131 #878441
>>878431
Введение имени это определение лейбла указывающего на какие-то данные, а в хаскеле имя ни на что не указывает, это просто параметр выражения, оно не живёт само по себе, его нельзя отдельно определить.
>>878466
#132 #878444
>>878421

> Какую ту же самую, ты ебанутый?


> ты получишь call-by-need, как в хаскеле



Ну вы поняли, да.
>>878466
#133 #878450
>>878421

>ты незаметно сделал язык ленивым


Не язык, а одно выражение. И не сделал, а это всего лишь один из вариантов решения. Так-то в окамле есть lazy, он теперь ленивым языком становится что ли?
>>878466
#134 #878466
>>878439

> нету where, какие-то ёбаные галочки в типах, одномерный синтаксис


> есть where, двумерный, в синтаксисе нет вообще ничего похожего на эмельный


> мл-лайк


/0
>>878444

> where - сахарок


> ту же самую


> подразумевал не эмельную


/0
>>878441
Введение имени это лирика, а не физика, аутист.
>>878450
Ок, нормальное замечание.
>>878540>>878541
#135 #878474
>>878401
В том же пюрэ есть where. Ленивость, порядок вычислений — все это не имеет значения, когда речь идет о сахарке. Как сахарок нужен — тот и можно сделать через ppx.
#136 #878540
>>878466

>Введение имени это лирика, а не физика, аутист.


Не можешь отличить параметр выражения от лейбла? Совершенно разная семантика же. Можешь ты в хаскиле ввести имя отдельно от лямбды куда оно тут же будет подставлено? Не можешь. Ну значит это нихуя не введение имени.
>>878551
#137 #878541
>>878466
Ладно, ты не знаком с историей создания хаскеля, не понимаешь, что тебе пишут и пытаешься толстить. По-моему все в треде это уже поняли, хватит это кормить.
#138 #878551
>>878540
В хаскеле синтаксис из миранды, а в миранде синтаксис из ISWIM. Корни более ранние чем первые эмели.
#139 #878688
>>875657
Штоэта блять?
#140 #878696
>>877559
Это как?
#141 #878794
Как называется подмножество зависимых типов, которое гарантировано не требует вычислений в рантайме?
>>878795>>879434
#142 #878795
>>878794
Зависимые типы, лол
#143 #879377
>>878051
>>878049
>>878060

Просто закинься кислым.
#144 #879396
>>878049
>>878060
это писал один и тот же анон? если так то чувствую родную душу :3 скажи, анон, чем ты занимаешься в частности в треде по фп? не хочешь вместе поупарывать?
#145 #879434
>>878794

>гарантировано не требует вычислений в рантайме


Хуй пойми, что ты тут имел в виду.
Вычисления во время компиляции? Отсутствие информации о типах в скомпилированной программе? Последнее называется type erasure, если что.
>>879623
#146 #879438
>>877950

>зачем фейсбук пилит reason?


Хочет и пилит, в чем проблема? Он может это себе позволить.

>Я только-только освоился с пюрэхаскеллями, до меня наконец-то дошла прелесть контроля эффектов — но из-за появления reason я не знаю, куда прикладывать усилия.


ИМХО, ризон не дает ничего нового по сравнению ни с хаскелем, ни с пюрешкой, поэтому не нужен. Кроме того, сам по себе тезис "фейсбук разрабатывает ризон" совершенно не означает, что за этой командой стоит вся мощь фб. Это скорее инвестиции, как в случае с мозилловским растом. Выстрелит - окей, не выстрелит - тоже хуй с ним. А вот пюрешку клепают люди, у которых основной продукт на ней сделан. Причем в последнее время они зашевелились, фундепы добавили.
Хаскель тут вообще немного в стороне - GHCJS завезли, хуле надо кроме того что когда в последний раз я на него смотрел, он был он тормознутый, жрал память как не в себя, да и хуй соберешь. А еще в итоге тащишь весь рантайм в браузер. Как там, кстати, не пофиксили его производительность?
>>879470
#147 #879470
>>879438

>Это скорее инвестиции, как в случае с мозилловским растом. Выстрелит - окей, не выстрелит - тоже хуй с ним.


Лол, нормальную ты так хуйню написал. Начиная с того что они его вполне целенаправленно разрабатывают, заканчивая тем что он привносит дохуя нового в байтопердолинг — по всем своим же пунктам обосрался.

А вообще, я не понимаю что вы так прицепились к этому ризону — это даже не язык, а интерфейс к окамлу, как его называют сами разработчики. Хотели потыкать окамл но не нравились begin..end и звёздочки вместо скобочек с запятыми — ну потыкайте ризон, больше он не для чего не пригоден.
>>879507
#148 #879507
>>879470

>это даже не язык, а интерфейс к окамлу


Так это же чудесно. Вместо очередного нового языка, который хуй знает когда созреет, получаем все плюшки уже имеющегося старичка.

>что вы так прицепились к этому ризону


Ризон — это окамль с вебмакаковским человеческим лицом. Оксиген никому не был нужен. А реакт нужен всем. И хороший язык для реакта дает надежду на увеличение продуктивности работы.
>>879524
#149 #879518
>>877783
Я бы не советовал использовать cake pattern, если ты совершенно четко не понимаешь какие плюсы и минусы он тебе даст по сравнению с конструкторами конкретно в твоём случае.
#150 #879524
>>879507

> Ризон — это окамль с человеческим лицом. Оксиген никому не был нужен. А реакт нужен всем. И хороший язык для реакта дает надежду на увеличение продуктивности работы.


Чёто я нихуя не улавливаю твоей логики. Реакт - жс фреймворк написанный на жс, причём тут окамл?
>>879536
#151 #879536
>>879524
Ты не в курсе, что ризон нацелен именно на жс-макак, и одним из его плюсов числится легкость взаимодействия с жс и генерация жс-кода, похожего на написанный вручную?
Один из фейсбукокорейцев уже почти допилил типизированные биндинги ризона к реакту, в дискорде можешь все увидеть.
>>879557
#152 #879557
>>879536
Бредятина какая-то. Скажи честно, ты видел тайпскрипт?
Он от этого вашего ризона отличается вещами уровня "x => x + x" vs "fun x => x + x", причём не в пользу ризона.
И для него тайпинги для всех сортов реактов и ридуксов уже давно написаны.
>>879559
#153 #879559
>>879557
Ага, видел. И отсутствие non-nullable типов до второй версии видел. И отсутствие ADT вижу. И косяк с инвариантами вижу.
Тайпскрипт — это жаба, натянутая на ЖС, а не полноценная система типов. Флоу и тот лучше.
>>879564
#154 #879564
>>879559

> отсутствие ADT


https://www.typescriptlang.org/docs/handbook/advanced-types.html
См раздел "discriminated unions".
А потом прочитай все разделы раньше и покажи в ризоне юнион типы и типы пересечения.
>>879570>>879573
#155 #879570
>>879564

>А потом прочитай все разделы раньше и покажи в ризоне юнион типы и типы пересечения.


Ты хоть страничку ризона открывал? Или код на кемле хоть раз видел?
А вообще тот анон прав — тайпскрипт это какая-то ява с мл-ем.
>>879587
#156 #879573
>>879564

>function isFish(pet: Fish | Bird): pet is Fish {


> return (<Fish>pet).swim !== undefined;


>}


АХ ТЫ Ж ЕБАНЫЙ ТЫ НАХУЙ.
ADT my ass.
Химера из жабы, утки и верблюда. Мутабельная химера. Недоделанная химера.
Не, лучше не посылай меня в документацию, а изучи ризон и/или окамль.
#157 #879587
>>879570
Ты же даже не знаешь, что такое типы объединения и типы пересечения.
Я не буду копипастить тебе код со ссылки, не можешь открыть - твои проблемы.

> изучи ризон и/или окамль.


Я дрочил на модулефункторы ещё когда твой папаша ебал свою правую вместо твоей мамы,
сейчас когда мне нужен параметризуемый модуль я просто пишу "module.exports = (param) => { ... }" и живу полноценной жизнью.
>>879595
#158 #879595
>>879587
Быстро же ты со своей костыльной параши сманяврировал на модули.
>>879608
#159 #879608
>>879595
Это не костыли, а остриё прогресса в мирке типизации. Я просто расширил круг претензий ещё и до модулей. Где-то там в 70х в языкострое было модно выдумывать синтетические абстракции и усиленно воевать с простотой и законами физики. Ни в коем случае нельзя реюзнуть обычные типы для модулей и делать параметризуемые модули обычными функциями, надо непременно придумать какие-нибудь сигнатуры, функторы, ебливую модель компиляции, чтоб пользователь языка не заскучал.
#160 #879623
>>879434
Ну, ты знаешь, что такое зависимые типы? Рантайм от компайлтайма отличаешь? В общем случае они требуют контроля типов в рантайме. Вот я и спрашиваю, как называется их подмножество, которое ничего не будет делать в рантайме.
>>879628>>879640
#161 #879627
Единственное чем привлекает этот ризон - возможностью писать компактные нативные программки на языке менее блевотном, чем все остальные с аналогичными свойствами.
>>879630
#162 #879628
>>879623
Ты не путаешь зависимые типы и контракты? Завтипы, как и прочие типы статически-типизированных ЯП, проверяются в компайлтайме.
>>879640
#163 #879630
>>879627
Таки да, в этом суть любого языка.
>>879641
#164 #879640
>>879623

> как называется их подмножество, которое ничего не будет делать в рантайме.


Гугли "proof irrelevance".
>>879628

> Завтипы, как и прочие типы статически-типизированных ЯП, проверяются в компайлтайме.


Проверяется структура с точностью до индукции всякой, сами значения в типах в рантайме нужны, причём иногда даже для логики. Например, это совершенно нормально для языка с завтипами, распечатать размер, который хранится на тайплевеле, для списка, длина и содержимое которого определяется в рантайме.
>>879646
#165 #879641
>>879630
Нет, на джаве или сишарпе или питоне или жс нельзя писать компактные нативные программки.
Они все требуют рантайм, они все исполняются на VM. А ризон в этом плане как сишка или кресты:
делаешь маленькие скоростные екзешники которым ничо не надо.
#166 #879646
>>879640
Спасибо, гуглю.
300 Кб, 521x704
#167 #880665
Посоны, можно как-нибудь дать синоним дата-конструктору?
data Some = Foo String | One
И нужно что-то вроде
Synonim :: String -> Some
Synonim str = Foo str
53 Кб, 400x590
#168 #880666
>>880665
И если что, я знаю что можно определить функцию
synonim :: String -> Some
Но мне нужно с аппер кейса прост.
>>880677>>880839
#169 #880676
Сап функциональщики
Подскажите пожалуйста что обмазать чтобы понять зависимые типы. type-driven development with idris кто-нибудь читал? Стоит ее покупать?
Я знаю эрланг, кложу и хаскел и хочу понять в чем прикол зависимых типов, посмотрел пару видосов на ютубе про идрис от создателя идриса, выглядит круто. Но чувак просто показал как он делает что-то на идрисе, выглядит как черная магия. Может есть хорошие пейперы или книги где это все описано?
>>880691>>880703
#170 #880677
>>880665
>>880666
{-# LANGUAGE CPP #-}
#define Synonim (Foo "Yoba")
#171 #880691
>>880676

>Подскажите пожалуйста что обмазать чтобы понять зависимые типы.


Можешь с этого https://leanprover.github.io/tutorial/ начать. Годный учебник + язык с зависимыми типами в браузере. Вообще, классика - это http://www.cse.chalmers.se/research/group/logic/book/book.pdf это http://starling.rinet.ru/~goga/tapl/tapl.pdf и это https://www.cs.kent.ac.uk/people/staff/sjt/TTFP/ но там сложна, требуется уже какое-никакое понимание что вообще происходит.
>>880728>>880834
#172 #880703
>>880676

>type-driven development with idris кто-нибудь читал?


Она ещё не вышла.
на сайте издателя значится как early access
автор ещё не дописал её, значит
но первые главы прочитать уже можно, если предзаказать печатную версию на сайте
>>880728
#173 #880728
>>880703
Вроде как читал что все чептеры готовы.

>>880691
Добра тебе!
#174 #880815
Хаскеляне, у меня допустим тип данных с большим количеством полей, а логику надо реализовать в зависимости от значения только одного из этих полей. Как в этом случае добраться до его значения без дикого патерн матчинга в виде
func _ _ _ _ myfield _ _ _
>>880823
#175 #880823
>>880815
юзать рекорды и линзы
#176 #880833
>>880665
Расскажешь, зачем тебе это? Синоним типу ты можешь определить, а конструкторы переименовывать... Что-то странное.
>>880872
#177 #880834
>>880691
Съеби отсюдова.
>>880835
#178 #880835
>>880834
ДЯдя, ты ахуел? Лижи мою залупку, шлюха.
>>880836
#179 #880836
>>880835
Да ладно, не обижайся, я ж любя. Не дай бох засрешь и тут весь тред своими хаматопиями блждад ну нахуй
>>880843
#180 #880839
>>880665
>>880666
Почитай про PatternSynonyms. С ними можно сделать это как минимум для паттерн матчинга:
pattern Yoba :: Some
pattern Yoba <- Foo "Yoba"
Но будет ли работать Yoba в обычном контексте вне матчинга - я хз, хаскеля под рукой нету, сам проверяй.
>>881771
#181 #880843
>>880836
Так зависимые типы это обязательно жосткая абстрактная теоретическая наркомания, приземлённого ремесленнического там в принципе быть не может, потому что нужно оно для супер-пупер формально-даказанных прошивок ядерных ракет.
>>880844
#182 #880844
>>880843
Да я не про это, лол, ладно.

Ну и в скалке жи есь зависимые типы, так что никаких ракет, Е ФОР ЕНТЕРПРАЙС
>>880848
#183 #880848
>>880844
Подмножество зависимых типов, которые есть в скалке, эмелях и тайпскрипте - это обычно не то, что имеют в виду, когда просят накидать литературы по зависимым типам.
>>880849>>880851
#184 #880849
>>880848

> в скалке, эмелях и тайпскрипте


Ах да, забыл ещё C++ и D.
#185 #880851
>>880848
Ну ладно, идрис себч позиционирует как "прикладной" язык, так что все равно необязательно ракеты. Алсо, что ты имел в виду под зависимыми типами в мл? В депендент мл или в мл?
>>880870>>880875
#186 #880870
>>880851
"Прикладной" язык Идрис - это как раз для ядерных ракет. А когда завтипочек говорит "неприкладной",
он вообще имеет в виду использование для конструктивного доказательства математических теорем, а не для софта.
3 Кб, 50x50
#187 #880872
>>880833
Прост хотел чтобы у конструкторов и прочего были как нормальные имена, так и односимвольные из блока юникода Mathematical Alphanumeric Symbols
Короч обычный
Больше айдишники меняю и отступы выравниваю чем код пишу.
>>880878>>880914
#188 #880875
>>880851

> что ты имел в виду под зависимыми типами в мл? В депендент мл или в мл?


То же что и в скале имеют в виду под зависимыми типами - path dependent types.
Они есть хоть в смл, хоть в окамл.
А в депендент мл что-то куда более существенное, ближе к агдам.
24 Кб, 707x239
#189 #880878
>>880872

>Короч обычный


Тут должен был быть Аутизм во макаба не смогла.
#190 #880914
>>880872
Лол, как я тебя понимаю, бро. Как что-то плохое, кстати. Кто-то и пробелы должен расставлять!
36 Кб, 400x366
#191 #881629
Посоны, есть какая-нибудь простая GUI-библиотека для Хаскелля под винду? Для тех кто ТОЛЬКО УЧИТЬСЯ.
Мне прост юникодный текст нужно выводить, а у терминала с этим проблемы. Ну ещё хотелось бы пару блоков с выводом текста, пару кнопочек и одну стороку для инпута.
>>881670
49 Кб, 509x378
#192 #881670
>>881629
Gtk + Glade, лови пример: https://github.com/apsk/memspacer-ui
Заодно сразу и template haskell макрос для подвязки к контролам по именам.
>>881771>>881795
44 Кб, 451x440
#193 #881770
Ну ёбанный ж ты нахуй.
Сам хачкель внутри себя держит чары в юникоде, но чтобы записать их в файл - нужно пердолиться.
>>881771
#194 #881771
>>881770
Ты видишь мои посты? >>881670 >>880839
>>881810
#195 #881795
>>881670
андрюша)
51 Кб, 572x546
47 Кб, 785x424
#196 #881810
>>881771
Я с кодировкой IO не мог разобраться, какой мне Gtk?
Алсо, как паттерн-мячинг и фолды/мапы с конструкторами использовать? Пикрелейтед.
>>881983
#197 #881983
>>881810
Что за цветовая тема. Очень надо, брат умирает от default theme/
>>882083
27 Кб, 531x202
#198 #882083
>>881983
так дефолтная же, One Dark, мимокрок
>>882095
#199 #882095
>>882083
Но не в джетбрэйновких продуктах.
Спасибо.
>>882135
17 Кб, 638x327
17 Кб, 635x328
#200 #882135
>>882095
Так с самого начала было ясно что это атом, лел
Палю годноту для идейки - https://github.com/ChrisRM/material-theme-jetbrains
>>882218
33 Кб, 417x326
25 Кб, 409x212
#201 #882151
SPJ со своим другом наконец-то разработали недостающую теорию,
открывающую мир нешаблонного параметрического полиморфизма байтоёбским типам со стека:
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/11/levity-1.pdf
>>883169
66 Кб, 1425x714
#202 #882218
>>875637 (OP)
Э, ОП, вот такая книженция на инглише есть. Надо?
>>882135
А в идее или атоме билдинг настроить можно?
>>882268
#203 #882268
>>882218

>А в идее или атоме билдинг настроить можно?


Что ты под этим подразумеваешь? Собирать по кнопочке/клавише со своими скриптами? Да.
#204 #882479
Начал вкатываться в хаскелл и застопорился на первой же задачке. Хочу для тренировки реализовать ориентированный граф и пару алгоритмов на нем, которые сейчас разрабатываю по работе на скале.

В общем я не осилил как реализовать граф. В джаве он выглядит как

class Edge {
Node source;
Node dest;
double weight;
// еще всякие специальные значения
}

class Node {
List<Edge> edges;
// всякие спец параметры узла
}

Так вот, как мне такую структуру перенести в этот ваш хаскелль с его прекрасными адт на которые так все яростно надрачивают? Как определить дерево рекурсивно я понимаю. Но как определить граф, который может содержать циклы? Ведь получается что мне в конструктор объекта нужно передавать объект который еще не создан.

Пока единственное что приходит в голову - хранить не ссылки на Node в ребрах, а какой-то индекс, а в самом графе хранить мапу из индекса в ноду. Но блядь, какого хуя? Лишнее преобразование, плюс потенциальное место для ошибок несуществующими индексами.
#205 #882491
Кто-нибудь на fpconf собирается?
>>882503>>882519
#206 #882494
>>876258

>У тебя есть гарантии, что хотя бы один фп язык станет мейнстримным?


Скала с тайплевел стеком чем тебе не мейнстримный функциональный язык?
>>882518
#207 #882503
>>882519
#208 #882518
>>882494
Тем что он сдох они переименовались и переключились главным образом на жаву, перестав даже спонсировать саму скалу?
>>882647>>883016
#209 #882519
>>882503
Головка от хуя.
>>882491
Щас бы о таком на ананасовой борде спрашивать. Еще вкшечку с авторизованным паспортом попроси сразу прикреплять к ответам.
#210 #882536
>>882479
Да, по индексам. Нет, лучше нельзя. Страдай Наслаждайся функциональным программированием.
>>882732
sage #211 #882647
>>882479
Почему тебе нужно именно такое представление? Задавай граф матрицей инцидентности, например.
>>882518
Кто вам это в уши насрал? LIghtbend всю свою инфраструктуру строят на скале, просто начали уделять больше внимания джавистам. Хотя и раньше в джаве использовали play и акку.
>>882732
#212 #882732
>>882647

>Задавай граф матрицей инцидентности, например.


У меня очень большие графы (миллионы узлов), притом довольно разряженные. Матрица при этом дохуя лишней памяти, она годится только для небольших плотных графов. Так что только списки ребер, только хардкор.

>>882536
Мда. Ну и нахуй ваш этот хачкель нужен, если я рпостейшую задачу из теории графов без ебли на нем решить не могу?
>>882740>>882752
#213 #882740
>>882732
Он для развлечения нужен, лол.
Хочешь писать что-то кроме кластера метапарадигм и дрочива на типах — возьми что-то попрактичнее. Окамл, скала там. цл если ты скобкофил
>>882745>>882788
#214 #882745
>>882740

> возьми что-то попрактичнее.


> Окамл, скала там. цл если ты скобкофил


Из огня да в полымя. На окамле вообще писать нереально даже чисто из-за его синтаксиса, не говоря уже о мёртвой экосистеме, тулчейне который на винде настроить так же сложно как хаскель 10 лет назад. ЦЛ невменозный язык гениальных решений типа сadaddr и mapc. Scala - Java для шизофреников.
>>882751
#215 #882751
>>882745
Хз что там у окамла с экосистемой, иде нет как и на том же хаскелле — онли редакторы с утилитками автокомплита. С синтаксисом у него всё как раз таки заебись в хаскеле повырвиглазистей, хоть и компактнее, если ты сидишь на венде — ок, отпадает.
Цл предложил "просто так", ради разнообразия лол.
А вот что не так со скалой, при том что ты сам на яве пишешь — мне в голову совсем не приходит.
>>882788
sage #216 #882752
>>882732
Хаскель ленивый, может это поможет циклические зависимости сделать. Нужно погуглить, я в хаскеле не силен.
>>882790
#217 #882788
>>882740
Скалу я и так использую по работе. Понравилась функциональщина но раздражает слегка ее (скалы) переусложненность, в итоге решил попробовать вкатиться в чистый функциональный язык.

>>882751
Это не я отвечал. Я как раз сейчас перекатываюсь из джавы в скалу (пару проектов уже на ней сделал небольших), ну вот решил заодно хаскелль глянуть.
#218 #882790
>>882752
Я уже погуглил, везде предлагают или какой-то грязный трюк использовать, либо делать как я сказал - через промежуточную индексацию узлов.
>>882803
sage #219 #882803
>>882790

>грязный трюк


Ты про это: https://wiki.haskell.org/Tying_the_Knot ?
Ничего грязного в нем нет, это просто использование особенности языка. Через ленивость еще и мемоизация делается: http://stackoverflow.com/questions/3208258/memoization-in-haskell
Я иногда хочу поглубже изучить хаскель именно из-за ленивости: на скале, например, я могу писать чисто функционально, это вопрос дисциплины, а вот модель вычислений поменять нельзя.
>>882845
#220 #882818
Функциональная парадигма норм в Kotlin реализована?
>>882844
#221 #882844
>>882818
Kotlin конечно мультипарадигменный язык, но все прагматичный и по этому больше ООП.

Для любителей функциональщины есть сторонняя библиотека
https://github.com/MarioAriasC/funKTionale
#222 #882845
>>882803

>из-за ленивости


Поясните, какой в ней практический профит? То есть да, в каждой статье про хаскелль будет обязательно написано про охуительные оптимизации, связанные с чистотой функций вообще и ленивостью в частности, в итоге из текста создается впечателение что ленивость охуенно позволяет выигрывать в производительности. Но при этом по результатам бенчмарков и тестов хаскелль нихуя не впереди планеты всей, по производительности он в целом уступает С++ и держится где-то на уровне джавы.

Ну и смысл в этом всем тогда?
#223 #882857
>>876182

>фп


>начать писать более лучший код


проиграл с этого аутиста.

обычно фп-лажей увлекаются лишнехромосомные "интеллектуалы", не осилившие ооп-дизайн, которых заебали собственные же полупроцедурные высеры.
#224 #882875
>>882845
Не знаю где это ты видел что ленивость = оптимизация (и как вообще ты связал это с чистотой), это чаще всего абсолютно наоборот например выделить большой кусок памяти под весь массив разом будет куда быстрее чем делать это при обращении к каждому последующему элементу.

Чистота вот уже может помочь оптимизации кода, но точно так же только в определённых юзкейсах а может так же всё здорово замедлить.

То что он держится на уровне жавы на практике ирл он заметно медленнее, а как-то выезжает только в синтетике, и то не везде, лол — это уже ахуенный результат, показывающий насколько хорошо порвботали разрботчики ghc. Просто это, видишь ли, это декларативный язык — он намного высокоуровенней жявы, и его скорость решается в первую очередь оптимизатором, а не тем насколько обосрался при написании.

>Ну и смысл в этом всем тогда?


развлечение, считай это тестовым обкаточным полигоном для новых(зачастую старых) крутых концепций, которые рано или поздно окажутся во всех языках в той или иной мере, просто сейчас для них рановато — так же как симула в своё время, или Джобс со своими рассказами 2007-го года "как всё окажется в браузере".
>>882912
#225 #882910
>>875637 (OP)

>Types and Programming Languages


Эта книга не про практическое программирование, это по сути CS/математика с кивками в сторону имплементации компиляторов. Она точно нужна в этом списке?
>>883018
#226 #882911
>>875952
Видимо, что пробелы криво стоят в ОП.
другой-анон
#227 #882912
>>882875

> (и как вообще ты связал это с чистотой)


чистота как раз таки сильно влияет на ленивость. Именно благодаря чистоте хаскель знает, что при одном и том же аргументе будет то же самое значение, фаза луны и время никак не могут повлиять, а значит выполнение можно отложить
>>882918
#228 #882914
>>875637 (OP)
Алсо бахни про Эрланг тогда уже или без типов не халяльно?
>>882918>>883175
#229 #882918
>>882912
>>882914
двачую, наряду с кложей второй фп-язык (хоть честно говоря эти потоки как-то не очень вписываются в концепцию "чистые функции"), который используется в реальном мире (особенно эликсир сейчас потиху заменят руби)
#230 #882921
>>882845
Ленивость == композиция. Можно писать простой код и он будет хорошо компонироваться с другим таким же кодом. грубо говоря
>>883024
#231 #882940
>>882845
Сделать ленивое энергичным можно довольно легко, поставив какую-нибудь языковую йобу. Но вот наоборот в энергичном языке уже сложно - нужно писать специальные ленивые версии всего, и как-то еще заморачиваться.
>>883007
#232 #883007
>>882940

>Сделать ленивое энергичным можно довольно легко


Вообще-то, нет. "Поставив йобу" означает, что кто-то за тебя уже всё написал. А так тебе точно так же придётся переписывать всю библиотеку, которая была заточена под ленивость, и при энергичных вычислениях может просто зациклиться на самой невинной на первый взгляд функции. Да и если твой язык изначально ленивый, то энергичным его можно сделать, наверное, лишь поправив компилятор/интерпретатор, в энергичном же можно просто всё обернуть в функции (будет выглядеть как говно, но мы сейчас не об этом).
#233 #883016
>>882518

>Тем что он сдох они переименовались и переключились


Я не про тайпсейф, а про тайплевел: cats, shapeless, вот это вот все. Тут тебе и уже почти стандартная библиотека тайпклассов, и чисто функциональные структуры данных, и продукты с копродуктами.
>>883017
sage #234 #883017
>>883016

>копропродуктами


пофиксил*
#235 #883018
>>882910

>Она точно нужна в этом списке?


Да. То что сегодня подразумевают под "функциональным программированием" - это во многом именно "программирование на уровне типов".
#236 #883023
>>882479
Рекуррентные и циклические определения? Думаю - коиндукцией, если такое есть в хаскеле.
sage #237 #883024
>>882921
Подробнее: https://hackhands.com/modular-code-lazy-evaluation-haskell/
>>882845
Кроме модульности, еще можно делать цикличестие зависимости и мемоизацию в чистом языке. Выше в ссылки были. А о производительности по сравнению с другими языками особено никто не говорит: в них тоже можно использовать ленивые вычисления, чтобы не считать лишнего.
#238 #883053
>>883018
Это лично тобой так воспринимается. Лямбда исчисление это функциональный язык и там типов нету. Я изучал долгие месяцы хаскел и зависимые типы, пытался присесть со штангой и сейчас решил что типизация и чистота мешают мне писать нормальный понятный код. На хаскеле что не пиши получается борьба с тайпчекером и какая-то ультразащитная хуйня. В общем если к коду нету офигенских требований по надежности я считаю сложную типизация оверинженерингом и через чур защитным стилем написания кода.
>>883650
#239 #883080
>>883018
Там теоретическая книга, как она поможет программисту ? TaPL смысла новичку читать 0.
>>883178
#240 #883083
>>883018
В итоге в списке 2 книги про то как начать программировать прикольно с нуля и неведомая теоретическая йоба с миллионом математических теорем в качестве упражнений.
#241 #883169
>>882151
Спасибо, почитаю.
#242 #883175
>>882914
Про эрланг просто есть уже тред. Надо ссылки бы поставить, да перекаты ведь, ссылки сдохнут.
#243 #883178
>>883080
Интро ту фп тоже теоретическая. В прошлом треде вкидывали более полный список книг, просто оп не все (пока) добавил и не в том порядке.
#244 #883415
>>882479
Не знаю, как правильно решать такую задачу, самого напрягает невозможность нормально задать циклические связи, но все чаще меня посещает мысль, что явных циклических связей даже в мутабельном коде быть не должно.
Если данных мало, то можно их описать как угодно, заботиться об эффективности и компактности незачем. Если данных действительно много или они используются в вебгуйне, то приходится думать о сетевом взаимодействии, где циклических ссылок нет(хмл-параша не в счет). Выходит, что в любом случае уместно городить типы, подобные реляционным отношениям в БД, а не обычные объекты.
#245 #883454
Приведите хоть один пример реальной задачи, где без циклов не обойтись и\или они сделают код в стопицотраз практичнее и элегантнее. Вот и мне ничего в голову не приходит.
>>883544>>883593
#246 #883542
>>882479
Попробуй навернуть индуктивных графов поверх ST или чего-то в этом роде.
#247 #883544
>>883454

>хоть один пример реальной задачи, где без циклов не обойтись


Расчет произвольного физического говна с пачкой вложенных циклов
мимо
>>883722
#248 #883593
>>883454
Обход/заполнение массива/коллекции .
>>883596>>883722
#249 #883596
>>883593
map fold unfold
>>883598
#250 #883598
>>883596
медленно и ест память
>>883601
#251 #883601
>>883598
Правда? В русте вообще все с этим ок, foldl' в хаскеле тоже вроде не сильно плох. Что не так, серьезно?
>>883608>>883616
sage #252 #883608
>>883601

>В русте вообще все с этим ок


Может потому что он вместо фолдов просто инлайнит обыкновенный цикл? Ты глянь имплементацию-то.

Да и опять же: вложенность. Они хороши когда нужно что-то быстро перебрать за проход.
Посмотри на benchmarksgame rust vs c и haskell vs ocaml - там где первые разгромно сливают на пустом месте всё внезапно забито мапами и фолдами.
>>883616
#253 #883609
Сага
#254 #883616
>>883601
Бля, ну если у тебя.
array_map( function($person) { return $person['name']; }, $some_array);
Это пиздец зашквар. Foreach проще и читабельней в данном случае, и удобнее, можно юзать yeld.

https://github.com/php/php-src/blob/master/ext/standard/array.c#L5309
Тем более все равно используются циклы, как заметил этот господин. >>883608
>>883627
#255 #883627
>>883616

>Тем более все равно используются циклы


Всё равно всё компилируется в машкод for simplicity умолчим про байткод, так давайте писать на голом машкоде.
>>883628
#256 #883628
>>883627
А давайте плодить бесполезные временные объекты и загружать страницы по 5 секунд.
>>883632
#257 #883632
>>883628
Да, в 13 лет я тоже хотел переписать Веб на ассемблере.
>>884027
#258 #883650
>>883053

>Лямбда исчисление это функциональный язык и там типов нету


А как же типизированное лямбда-исчисление, м-м-м?
>>883683
#259 #883658
Простое доказательство отсоса функциональных дебилов:
Map:
array_map( function($person) { return $person['name']; }, $some_array);
Foreach:
let r=[];for (let p of a) r.push(p.name);
Практически в 2 раза меньше кода, и гораздо читабельней.
#260 #883661
>>883658
И что это за довнский язык?
sage #261 #883662
Специальная олимпиада пхп-инвалидов ИТТ.
9 Кб, 285x41
#262 #883664
>>883658
Зачем так длинно?
#263 #883683
>>883650

>>Лямбда исчисление это функциональный язык и там типов нету


>А как же типизированное лямбда-исчисление, м-м-м?


это надстройка, хочешь типов? Пожалуйста, но в своем сообщении я сделал акцент на то, что основа функционального программирования не требует типов. Можно быть функциональным, чистым и имьютабельным не сражаясь с тайпчекером. Тайпчекер не обязателен.
#264 #883689
>>883658
Ты дебил? Просто иди нахуй отсюда в свою пхп парашу. Фолд это оператор высшего порядка которые позволяют делать сложные преобразования данных в декларативном стиле, фолд изящно параллелится и математически прекрасен. Если ты не знаешь нахуя тебя хотя бы операторы высшего порядка (Даже джава долбоебы уже догадались, прикинь?) то что ты делаешь в этом треде?
#265 #883691
>>883689

> фолд изящно параллелится


В теории.
>>883696
#266 #883693
>>883689

> фолд изящно параллелится


Т.е. нет, он даже в теории не параллелится.
>>883725
#267 #883695
>>883689

>фолд изящно параллелится


Короче, ты обосрался. Вот.
#268 #883696
>>883691
В какой теории? Ты лурка начитался? ДАЖЕ ДЖАВА слесари это делают на своем хедупе, а в функциональном языке ты просто спавнишь еще один поток потому что данные не зависят друг от друга, в эрланге реализация распределенного мап-редьюса занимает до 50 строк, зависит от раскидистости почерка. Хаскелистам даже делать нихуя не надо вроде, он будет фолдить асинхронно даже не явно для программиста.
>>883700
#269 #883697
ой блять я проебался, фолд не параллелица, рили, я про мап имел в виду. Обосрамс случился
>>883725
#270 #883699
Но можем считать что мап это подмножество фолда где в фолд функции нету зависимости от аккамулятора
#271 #883700
>>883696

>данные не зависят друг от друга


Только вот в случае фолда они зависят.

> Хаскелистам даже делать нихуя не надо вроде


> вроде


Все твои "знания" — это набор слухов.
>>883710
#272 #883710
>>883700
Как ты паралеллишь вычисления в хаскеле, лиспе. Пролей свет пожалуйста.
>>883712
#273 #883712
>>883710

>Как ты паралеллишь вычисления в хаскеле


https://hackage.haskell.org/package/parallel/docs/Control-Parallel.html
>>883713
#274 #883713
>>883712
http://hackage.haskell.org/package/parallel-3.1.0.1/docs/Control-Parallel-Strategies.html
Да уж как тут все не просто у ребят хаскелистов
http://stackoverflow.com/questions/5606165/parallel-map-in-haskell

Ты писал параллельный код на хаскеле?
>>883715
#275 #883715
>>883713

>Ты писал параллельный код на хаскеле?


Нет. Но необязательно писать параллельный код, чтоб знать, что хаскель ничего "автоматически" не делает и Amdahl's law с причинностью нарушать не позволяет.
>>883716
#276 #883716
>>883715
Ну это хорошо что ты знаешь конечно. Спасибо
#277 #883722
>>883544
>>883593
Наркоманы, имелись в виду циклические ссылки, а не фор\уайл-луп, лол.
#278 #883724
>>883658
Foreach:
let r=[];for (let p of a) r.push(p.name);
Map:
a.map(p => p.name)
>>883727
#279 #883725
>>883693
>>883697
Ну вообще-то параллелится, нужно только только чтобы функция, по которой идет фолд, была коммутативной.
>>883726>>883730
#280 #883726
>>883725

>коммутативной


А может всё-таки ассоциативной?
>>883728
#281 #883727
>>883724
Кстати, на каком языке аналогичный код будет короче всего?

(map :name a)
>>883729
#282 #883728
>>883726
Ассоциативной тоже, да.
>>883730
#283 #883729
>>883727

>эти скобки


На пюрэ на один символ больше (_. вместо :), но на два меньше.
>>883731
#284 #883730
>>883725
Ну и это довольно сильные ограничения на функцию, которую можно сунуть в fold.
Надо, во-первых, ограничить тип операции с a -> b -> b до a -> a -> a

>>883728

>Ассоциативной тоже


Что значит "тоже"? Ассоциативности достаточно, коммутативность не нужна.
>>883732
#285 #883731
>>883729
А на каком-нибудь факторе, кстати, можно убрать явное упоминание аргумента, так что будет еще короче, наверное.
#286 #883732
>>883730

> ограничить тип операции


Ну так это фактически и есть требование коммутативности, не?
>>883734
#287 #883734
>>883732
Естественно, для коммутативности нужно a -> a -> a, но из a -> a -> a не вытекает коммутативность.
>>883739
#288 #883739
>>883734
Верно.

Короче, коммутативность нам нужна для того, чтобы промежуточные результаты можно было продолжать редьюсить в порядке их получения, разве нет? Ассоциативность нам дает только отсутствие разницы между левой и правой сверткой, но чтобы продолжать свертку на каждом уровне, когда готовы хотя бы два любых результата на этом уровне, нам нужна коммутативность, верно?

Если нет коммутативности, то будут локи и не полная параллельность.
>>883741>>883744
#289 #883741
>>883739
А, ну если ты хочешь в порядке получения, то тогда да, коммутативность нужна.

>Ассоциативность нам дает только отсутствие разницы между левой и правой сверткой


Даёт возможность параллелить вообще. Т.к. позволяет считать
(x `f` (y `f` (z `f` (.....)))
Как
(x `f` y) `f` (z `f` w) `f` ....
>>883747
#290 #883744
>>883739

>Ассоциативность нам дает только отсутствие разницы между левой и правой сверткой


Для этого как раз коммутативность нужна.
>>883747
#291 #883747
>>883741
Я это и имел в виду, да. Короче, мы просто под "параллельностью" подразумевали разные вещи: я - полную, а ты - хоть какую-то\практическую. Вот.

>>883744
Разве? Левая свертка - это ((a.b).c), а правая - (a.(b.c)). Или наоборот, вечно путаю, лол. Порядок аргументов тот же, порядок вычисления только другой.
>>883748
#292 #883748
>>883747

>Порядок аргументов тот же


При левой свёртке начальный элемент слева от `f`, а при правой — справа.
>>883759
#293 #883749
Но ведь все это по итогу сведется к тому что какие-то части параллелятся из-за отсутствия зависимости к следующим вычислениям а какие-то не параллелятся. Можно просто разделить эти задачи между потоками мапперами и потоками редьюсерами как это делают в эрланге например.
Коммутативные функции про которые вы говорите выше ведь всеравно должны на каком-то этапе свернуться в 1 аккамулятор ведь. Правильно? Просто если операция коммутативна то можно ее сделать параллельно, но прицепить к результату свертки ее всеравно надо будет, или я что-то упускаю?
>>883750
#294 #883750
>>883749
Короче, мне тут пытаются доказать, что fold параллелится. Только почему-то рассказывают про map-reduce.
>>883756>>883761
#295 #883756
>>883750
Хер знает, для меня картина мира такая - мап можно распределить на хуилион потоков и потом свернуть результаты. Первая часть параллелится как нефиг, вторая под вопросом, свертка же тоже может быть простая например просто добавлять результат в set, что является ассоциативной и коммутативной операцией, тогда можно редьюсеров захуярить большое количество и это будет очень близко к тру параллельности. Но все должно будет сойтись когда-нибудь в 1 точку из-за чего эта параллельность не совсем чистая. Опровергните если я не правильно понял
>>883761>>883762
#296 #883759
>>883748
И что? Это же разные (в общем случае) элементы. Давай еще раз: левая свертка от правой отличается расстановкой скобок, но не порядком аргументов. Мы не делаем (c.b).a, мы делаем a.(b.c) - ок? Из ассоциативности для трех элементов прямо вытекает ассоциативность для эн элементов, а левый фолд от правого только ассоциотивностью и отличается.
#297 #883761
>>883756
Ну ясное дело, что в итоге все сойдется в одну точку, но под параллельностью же мы понимаем разделение задачи на потоки там, где это возможно, да? То есть 2+2 - это частный случай параллельного вычисления: тут всего одна операция, так что ясное дело, что она выполняется атомарно (параллелить ее не с чем, она одна всего), но это как бы такой аналог базового кейса в рекурсивном определении. Короче, параллельность - это не значит, что мы в каждый момент времени нагружаем эн потоков, параллельность - это когда мы всю имеющуюся работу (относительно) равномерно распределяем по всем имеющимся потокам.

>>883750
Ну, мап - частный случай фолда, еали уж на то пошло, но я про мап-редьюс не рассказываю, если это ты на меня намекал.
14 Кб, 525x168
#298 #883762
>>883756

>сойтись когда-нибудь в 1 точку из-за чего эта параллельность не совсем чистая.


Что сие значит, "параллельность не совсем чистая"? А какая?
#299 #883769
>>883762
Почему ты не назвал функцию-аргумент эф?
>>883789
#300 #883771
>>883762

> mappend

>>883777
71 Кб, 640x480
#301 #883774
>>883762
ну хуй знает дебильный термин применил.
В общем в случае с мапом мы параллелим труево, потоки полностью параллельны и отобразить это можно как лист параллельными линиями мапится в другой лист. Рисунок параллельной свертки будет же выглядеть как полурешетка. Немного другая форма вычислений немного не такая, чем та, что ты видишь когда параллелишь маперы.
>>883789
#302 #883777
>>883762
>>883771
Предлагаю переименовать в mempty
#303 #883789
>>883769
Взял первый попавшийся пример из гугла.
>>883774

>В общем в случае с мапом мы параллелим труево, потоки полностью параллельны и отобразить это можно как лист параллельными линиями мапится в другой лист.


Как мне кажется это схема, которая лишь описывает ограничение политики распараллеливания, то есть мы фактически говорим "дождаться результата применения функций вот в этом и в этом потоке и применить функцию в отдельном потоке". И вообще что ты подразумеваешь под "тру параллелим" - два потока Хаскеля, два потока операционной системы, два потока операционной системы привязанные к разным CPU?
>>883798
#304 #883798
>>883789
Я имею в виду асинхронные процессы, как они реализованы мне вообще пофиг. у нас есть лист из 50 элементов мы делаем параллельный мап. Для этого спавнится 50 процессов внутри системы. Для программиста это выглядит так. В железе же у нас например только 1 алу и тогда планировщик распределяет нагрузку асинхронно. Если у нас 50 алу то они буду полностью параллельны.
Ну в общем наверное надо от этого термина дурного тру-не тру отказываться, в целом я понял что фолд можно вполне эффективно распределить на много потоков если операции коммутативны, ассоциативны. Чуть менее эффективно чем мап.
#305 #883832
Аноны, подскажите такую штуку.
Есть класс с двумя функциями, назовем скажем Foo() и Bar()
Функцию Foo() вызываю я сам, функцию Bar() вызывает другой элемент фреймворка, в неизвестный момент времени после вызова метода Foo(). Вопрос: Как мне, фп-way, передать некое значение из метода Bar() в точку вызова метода Foo()?
Если кому-то интересно - язык C#, платформа Xamarin.Android
>>883874
sage #306 #883874
>>883832
Нихуя не понятно. Код на шарпе скинь.
>>884022
#307 #884022
>>883874
http://pastebin.com/NLuNXA6c если убрать все лишнее
>>884086
#308 #884027
>>883632
Ты хотел, а я делал (пилил с друзьями сайтец на С++ с вставками на асме)
>>884213
#309 #884086
>>884022
Через приватное поле класса, не? Нафига создавать себе проблемы на пустом месте, ну.
>>884154
#310 #884154
>>884086

> Мутабельное состояние


> Фп-way


Еще предложения?
>>884190>>884520
#311 #884190
>>884154

>void OnActivityResult


Этот метод нужен только для изменения мутабельного состояния. О каком ФП-way идет речь?
>>884271
#312 #884213
>>884027

>сайтец на С++ с вставками на асме


Хуйня. Надо было делать свой православный бинарный формат заместо проклятого хтмл, а ты просто пыжылся сделать более лучшую раздавалку текста.
#313 #884271
>>884190
Я хочу отделить мутабельный код из фреймворка, на который я не могу повлиять, от моего кода, который будет чистым от побочных эффектов
>>884463
sage #314 #884463
>>884271
Отделяй, но в этом конкретном случае фреймвор диктует тебе как писать код. Сложно писать функционально в неподходящем окружении. Это, к слову, не понимают дурачки которые кукарекают что скала с появлением восьмой джавы стала нинужна.
>>884642
#315 #884520
>>884154
Локальное мутабельное состояние никак не противоречит никаким фп-уэй. Всем похуй, что там у тебя внутри одного класса происходит.

Алсо, какой фп-вей, ты же на сишарпе пишешь под ооп-фреймворк. Еще раз спрошу - нахера создавать себе проблемы на пустом месте?
>>884541>>884642
#316 #884541
>>884520

> Локальное мутабельное состояние никак не противоречит никаким фп-уэй. Всем похуй, что там у тебя внутри одного класса происходит.


Верняк, любую глобальную переменную можно считать просто слепком мира IO-монады, все процедуры просто описывают отображения мира
но для краткости это опущено как в синтаксисе так и в сигнатурах, но это сахарок -
всё чисто.
>>884560
#317 #884560
>>884541
Лол, ну так-то я не совсем это имел в виду. Я не про глобальные переменные, а про локальную мутабельность. Если чистая по сигнатуре функция создает внутри какое-то локальное мутабельное состояние, которое никак не ввходит наружу, то она все равно остается чистой для вызывающей стороны.
>>884566
#318 #884566
>>884560

> что там у тебя внутри одного класса происходит.


Тогда лучше было написать "внутри функции", потому что мутабельные поля класса - то же самое что глобальные переменные.
>>884574>>884600
#319 #884574
>>884566

> поля класса - то же самое что глобальные переменные


Ноуп. Объекты - замыкания для бедных.
>>884577>>884581
#320 #884577
>>884574
Монады - замыкания для богатых (умственно и духовно).
#321 #884579
>>884577
Не уловил. Монады тут при чем?
#322 #884581
>>884574
>>884577
Акторы - замыкания для богатых (материально).
>>884584>>884642
#323 #884582
>>884577
Массивы - замыкания для честных.
>>884588
#324 #884584
>>884581
Алло джо ето ти?
243 Кб, 900x1125
#325 #884588
>>884582
Числа - замыкания для мутных.
sage #326 #884600
>>884566

>поля класса - то же самое что глобальные переменные


Зависит от интерфейса класса. Если их изменения видны снаружи, то да, ты прав. Если это какой-то кэш для мемоизации что-то не могу больше примеров придумать, разве что для самопальной реализации ленивости, то нет.
#327 #884642
>>884463
Сложно, ну что мешает
>>884520
локальные мутабельные переменные меняют состояние объекта класса
>>884581
А они кстати в моем случае не подойдут?
2 Кб, 228x49
#328 #885081
TaPL не качается.
192 Кб, 702x702
#330 #885767
Ньюфаг написал свою первую монаду.
Посоны, как упрощать подобное:

f = Constr <$> ( (++) <$> astr <> ( achar > (('#':) <$> astr) ) )
Constr :: Str -> SomeType
astr :: SomeApp [Char]
achar :: SomeApp Char

Чёт трудно ориентироваться в этом вашем лифтинге.
>>885779
46 Кб, 704x396
19 Кб, 797x147
#331 #885779
>>885767
Бля, забыл про разметку.
41 Кб, 850x198
#332 #886152
Господа, а поясните-ка мне одну вещь. Я правильно понял, что в конструктивной математике (в контексте данного треда - в языках с зависимыми типами) теорема Ферма доказывается в одну строчку пикрелейтед и ее фальшивость подтверждается тем фактом, что соответствующий такой спецификации тип пустой? Как написать конкретный код (неважно на чем) для проверки?
>>886184>>886245
#333 #886184
>>886152
Там же написано, что можно написать спецификацию, не зная, существуют ли программы, ей удовлетворяющие. Пикрелейтед нет никакого доказательства, там только формулировка соответствующей теоремы (т.е. тип). Доказательством была бы программа.
>>886188
#334 #886188
>>886184
Ну смотри, в прувере пишется спецификация, и если нет программ, удовлетворяющих такой спецификации, то спецификация противоречивая и ей соответствует пустой тип. Это же и есть доказательство теоремы Ферма, т.е. ее абсурдности.
>>886191
#335 #886191
>>886188
Как доказать, что таких программ нет?
>>886194>>886195
#336 #886194
>>886191
Попытаться их построить конструктивно, т.е. начать перебирать указанные в спецификации a b c и n. Как только найдется n, нарушающий равенство в последних скобках, считай доказательство построили.
>>886205>>886669
#337 #886195
>>886191
Доказать отрицание утверждения.
>>886205
#338 #886205
>>886194
Доказать отсутствие перебором? Ну-ну. Алсо, как из перебора натуральных чисел у тебя получается программа?

>>886195
Как?
>>886207>>886218
#339 #886207
>>886205
Ты не понял жи. Согласно этой спецификации требуется найти 4 натуральных числа, удовлетворяющих условиям спецификации. Правильность теоремы Ферма зависит от того, есть ли такие числа для всех случаев. Любой набор положительных чисел, не соответствующих спецификации является доказательством ложности теоремы Ферма.
>>886235>>886387
#340 #886218
>>886205
Т.е. программа в данном случае - это функция от 4 аргументов: (exist a:N)(exist b:N)(exist c:N)(exist n:N) -> (n>2&a^n+b^n=c^n).
>>886235>>886387
#341 #886235
>>886207
>>886218
Ебать ты даун. Как можно в 2016 путать forall и exists.
#342 #886238
А, нет, ты прав. Эта сигнатура - это и есть утверждение отрицания теоремы Ферма.
#343 #886245
Собственно, задача - конкретный код >>886152 этого. Чтобы можно было тралить сторонников неконструктивной математики, которая еблась с теоремой Ферма 200+ лет, а в конструктивной все доказывается одной коммандой на функциональной ЯП.
>>886248
#344 #886248
>>886245
Не будет никакого траленга. Всё точно так же: достаточно найти один контрпример и тогда получится записать терм с таким типом -> теорема опровергнута.
206 Кб, 720x599
#345 #886273
О, тут уже анон опроверг теорему Ферма.
Скоро получит славу и признание научного сообщества за своё открытие.
>>886292
#346 #886292
>>886273
Специально для тебя, прямолинейного долбоёба:

> -> теорема опровергнута


> и ТОГДА теорема БУДЕТ опровергнута

#348 #886387
>>886218
Зойчем ты перепечатал это еще раз, это же на том пике написано.

>>886207
То есть тот факт, что эта теорема истинна, тебя не смущает? Еще раз: доказать отсутствие перебором? Алсо, как из перебора натуральных чисел у тебя получается программа?
>>886407>>887493
#349 #886407
>>886387
Ты перебираешь на бумаге или ещё где, а когда найдёшь 4 подходящих числа, тогда можешь их вписать в код и они будут термом-доказательством вот этого типа: (exist a:N)(exist b:N)(exist c:N)(exist n:N) -> (n>2&a^n+b^n=c^n). Всё, больше никак. Если не найдёшь такие 4 числа - доказать этот тип не сможешь.
>>886418>>887493
#350 #886418
>>886407
Замечательно.
#351 #886669
>>886194

>Попытаться их построить конструктивно


Пошол нахуй, интуитивистский питух.
>>886696
#352 #886696
>>886669
Интуиционисткий.

Починил таки.
>>887493
#353 #887439
https://youtu.be/oyLBGkS5ICk

> Right now, you press "save" in your editor and all your tests run, because your tests are pretty useless: you wrote them yourself and they don't test anything



Очередной охуенчик от Рича Хикки о композиции софта на макро уровне и о том, почему semantic versioning - хуйня. Первые несколько минут скучноваты, но дальше просто и сидишь и думаешь про себя: блядь, это же очевидно и просто, почему мы этого до сих пор делаем? Как мы вообще умудрились get it wrong?

Почему модули не знают ничего о неймспейсах? Почему неймспейсы не знают ничего о версиях? Почему версии не знают ничего о системе контроля версий - она же, блядь, для этого и предназначена! Просто пиздец какой-то, если задуматься: все в индустрии используют абсолютно сломанное решение, просто сломанное и нерабочее, просто из-за того, что в свое время никто не сел и не подумал, как сделать это правильно.

“It's twice as fast and makes cows“, лол.
#354 #887441
Да, как я из его слов понял, как это примерно может выглядеть. Вот пишешь либу, решаешь ее зарелизить. Делаешь неймспейс либраринейм.апи.в1. Помимо него у тебя есть еще и либраринейм.приватный-стафф. Делаешь джар\гем\крейт, модуль короче, в котором пишешь, что он провайдит либраринейм.апи.в1 (а про приватный-стафф ничего не пишешь). В следующем релизе решаешь добавить еще одну функцию в апи, например, - это все еще в1-компатибл апи. Еще через релиз понимаешь, что тебе надо переименовать (то есть убрать одну и добавить другую) функцию - создаешь либраринейм.апи.в2, экспортируешь туда весь в1 апи и делаешь замену, релизишь. Приватный-стафф остался тот же, реюзаешь. в1 апи остался тот же, ничего не ломаешь. В мавене теперь лежит два модуля: только с в1 и с двумя в1 и в2 апи, оба называются "либраринейм", второй расширяет первый, ничего не сломалось. Потом делаешь следующий релиз и все переписываешь с нуля, апи.в3. А первые два апи выкидываешь, чтобы не загромождать код. Тогда модуль будет называться уже, условно, "либраринейм-некст", потому что он ломает совместимость => другое имя. Еще по идее можно вытаскивать все эти в1 и в2 из гита, а не держать в стейджинге. И все эти переименования будут формально проверяться, то есть если попытаешься запушить под тем же именем модуль, из которого что-то выкинуто - компайлтайм эррор (точнее релиз-тайм), если код функции изменился по сравнению с прошлым коммитом - релизтайм ворнинг, тут уже придется повериьь на слово, что поведение не изменилось.
#355 #887493
>>886387

>Еще раз: доказать отсутствие перебором?


Либо присутствие. А как ты еще предлагаешь доказать что-то кроме собственно построения вычислимого объекта и его предъявления в качестве доказательства?

>как из перебора натуральных чисел у тебя получается программа?


Тут >>886407 за меня ответили. Пустой тип соответствеут абсурдности изначального высказывания, непустой - доказательству такового высказывания, это интерпретация логических констант по Гейтингу. Программа = функция в конструктивном смысле, т.к. принимает нечто на вход и выдает нечто на выходе. Пример - лямбда же, да и вообще все функциональное программирование.
>>886696
Ты хоть название для начала писать научись, потом предъявляй что-то.
>>888058
#356 #888058
>>887493
Ты меня не так понял. Ладно, неважно.

>>887493
Я и не предъявлял, а починил предъявлявшего.
#357 #888195
Хуле тонем
DI зависимости на грязные функции - как сделать? #358 #888294
Пример
У меня есть чистые функции func1 и func2 и "грязная" funcIO (она делает запрос к вебу)
func1 вызывает func2, которая вызывает funcIO

Я хочу подменить funcIO на фейковую и протестить func1
Как это сделать?


=================================================

Сначало я передавал funcIO как параметр в func2, но из-за этого funcIO приходится передавать еще в func1.
Минусы: параметры метода засоряются и много копипасты

Сейчас я храню такие "грязные" функции как бы в глобальном словаре и планирую в тестах заменять его элементы на фейковые.
Минусы: появляется некая неявность в программе, те вызываю функцию и не знаю заранее, а вдруг где-то внизу есть запрос в сеть и тп.
>>888305>>888340
#359 #888305
#360 #888340
>>888294
Передавать всем функциями словарь env с компонентами, которые делают всю грязную работу. Это устоявшаяся практика тащем-то. Алсо, если у тебя ф2 вызывает ио, а ф1 вызывает ф2, и ты хочешь тестировать ф1, то у тебя скорее всего неоптимальная архитектура. Надо стараться, чтобы в каждом модуле только функции верхнего уровня требовали енв, а вся логика была в чистых функциях, которые бы чейнились с грязными функциями линейно, а не вложенно. Не всегда так красиво получается сделать, конечно, ну и без контекста непонятно, что там у тебя с этим.
>>888355>>888427
#361 #888355
>>888340
OK, спасибо что рассказал своим словами.

Постараюсь поднять наверх запрос к вэбу и перенести список IO фунций из глобального стейта в env.
#362 #888427
>>888340

>ф2 вызывает ио, а ф1 вызывает ф2


>вызывает


Ну что же вы, функцаноны.
>>888924
#363 #888804
Видео для новичков от трансгендера функционального программирования:
https://www.youtube.com/watch?v=25u-pp-7PHE
#364 #888924
>>888427
Не понял, чего?
#365 #888925
>>888804
Больше трансгендеров богу трансгендеров! https://youtu.be/lvclTCDeIsY
#366 #888928
>>888804
>>888925
Всё, ФП зашкварено.
>>888940>>889076
#367 #888940
>>888928
Изначально такое было.
#368 #889008
>>888925
Раз пошла такая пьянка:
https://www.youtube.com/watch?v=DHubfS8E--o
>>889076
#369 #889076
>>888928
Эх, щас бы вспомнить о том, что Тьюринг был гей-шлюхой...

>>889008
Она же не транс, ты чего. or is she?
>>889080
#370 #889080
>>889076

>


это транс
>>889082
#371 #889082
>>889080
Да ладно! Не, не верю, я ее видел до этого дохрена раз, и никакие детекторы трансов во мне не сработали... Бля, я что, зашкварен теперь?! Да не транс она.
#372 #889385
>>888925
Начинать презенташку с "мы тут все женщины, делай с этим, проклятый цис-скам", а потом просить помощи - это какой-то просто next level маркетинга.
>>889414>>889432
#373 #889414
>>889385

> цис-скам


Забавно, что ни мне, ни остальным присутствовавшим в зале даже в голову ничего такого не пришло (потому что она ничего такого и не говорила), но insecure slavshit как всегда нашел повод, чтобы обидеться, хе-хе.
>>889423
#374 #889423
>>889414

>в голову ничего такого не пришло


Потому что ты живёшь с своём мирке, и тебя феминистки и прочие социальносправедливые воины ещё не заебали.

>она ничего такого и не говорила


Ой-вей, тебе цитатки дать? А вначале что это было? Ленгвидж мейд бай вимен, дил виз ит, експект зем ту нов беттер зан ю, мы тут не любим вайт цис-мелес и делаем свой язык как хотим - вот это вот всё?

>обидеться


Сколько тебе лет?
>>889435
#375 #889432
>>889385

>цис хуис маркетинг


Сука, ебаное программирование. Только червь-пидор в 2016 году считает эту профессию илитной. Как хорошо было на васме, где ебанутых слали на хуй и поливали говном. А современное ойти целиком состоит из пидоров.
>>889438>>889452
#376 #889435
>>889423
Ну так если тебя заебали какие-то воображаемые враги, то почему мирок у меня, а?

Да, дай цитатки, где там про цис-скам было. У меня такое чувство, что ты либо не уловил поинта того, о чем они говорили, либо я даже не знаю. Если тебя так раздражает сам факт того, что бабы делают язык и могут быть более лучшими профессионалами, чем ты, то тут уж горбатого толлко могила исправит.

Обижаешься ты, а спрашиваешь сколько лет меня, хех. Немного меньше тридцати.
>>889476
#377 #889438
>>889432
Ололо, еще один славшит стриггерился, найс.
>>889452
#378 #889441
>>888804
какой-то толстый негр в нелепых рюшках
промотал к концу, конечно не забыл всем напомнить что он transwoman of color
проверил на гитхабе, в репе ничего кроме js/php
делает как я понял всякие ui и фронтенды
#379 #889452
>>889432
Пидоры не могут в программирование, и ни в какую другую разумную деятельность ввиду нарушений в работе ЦНС, проявляющейся в ригидной деградации интеллекта. Их сознание состоит из подобных фраз: >>889438 на 80-90 процентов, эти фразы настойчиво повторяются ежедневно, годами, почти без вариаций. Т.е., фактически, пидор - это просто сломанный спамбот, который несёт ненужную раздражающую пургу в пустоту.
>>889457
#380 #889457
>>889452
Смотрите-ка, манечка детектировать начала, лол. Продолжай, пожалуйста.
>>889461
#381 #889461
>>889457

> манечка


> начала


Пошел на хуй, пидорас!
>>889466
#382 #889466
>>889461
Почему ты обсуждаешь хуи и геев в треде про фп?
>>889467
#383 #889467
>>889466
Потому что ты пидор и надо послать тебя на хуй?
>>889664
#384 #889476
>>889435

>Да, дай цитатки, где там про цис-скам было


Не дам. Удалил видео уже. В самом начале, ещё до представления авторов языка он говорит про white cis-males. Наверное, даже до четвёртой минуты. И проблема в тебе, если ты знаешь, что социально-ориентированные подразумевают под white cis-males.
>>889664
#385 #889664
>>889467

> пидор


> хуй


Иди подрочи уже и успокойся.

>>889476

> Не дам.


Конечно не дашь - ведь ты выдумал слова про проклятый цис-скам, и сам же на них и обиделся.

Вообще, это очень забавно, что их поинт как раз в том и состоит: "у меня есть пизда, но что имеет значение - это мой код, so let's talk about that" - и славскам, разумеется, гневно обсуждает их гениталии/гендер/социальную позицию - что угодно, кроме собственно кода. Ну хули делать, иди радио радонеж послушай да блинов с лопаты наверни.
#386 #889667
>>889664
Но зачем мне успокаиваться, когда я могу хуесосить тебя, охуевшего гнойного обосранного пидора-чмошника?
>>889668
#387 #889668
>>889667
Матешу сделал?
>>889702
#388 #889702
>>889668
Матан нинужен для успешного ФП-Программиста.
179 Кб, 458x533
#389 #889714
#390 #889722
Ну вот и славно, на этом и закончим.
#391 #889746
>>889664

>Конечно не дашь


Конечно, не дам. Что проще - мне скачать целиком видео, чтобы дать тебе точное время и получить в ответ "это нищитается и всё нитак", или тебе тыкнуть на ссылку, посмотреть это видео пять минут (первую даже можешь промотать) и самому во всём убедиться? Ведь, судя по всему, тебе важно победить в интернете, и видео ты смотреть не будешь, даже если я дам тебе точные секунды.

>выдумал слова


Ай-яй-яй. Да, там не было сказано слова "скам", но если ты посмотришь-таки видео, а потом пойдёшь на тумблер, сходишь в твиттеры и блоги феминисток, погуглишь social justice warriors, white male supremacy и т.д., то ты сам поймёшь, что мне не понравилось. Но, предупреждаю тебя, не лезь туда. После этого ты никогда больше не будешь прежним.
Можешь не отвечать. Я, например, больше не буду, пока ты не ознакомишься с предметом. И вообще, иди-ка ты чекни свои привилегии.
>>889751>>889766
#392 #889751
>>889746
Чекнул тебе за щеку своими хуеблядскими 18 сантиметрами, проблемы?
#393 #889764
>>889664

>"у меня есть пизда, но что имеет значение - это мой код,


Это норма, когда хочешь обсудить свой код, но вступительное слово посвящено пизде? Может тоже стоит начинать совещния типа "У меня хуй, но давайте обсуждать проблемы на продакшене."?
>>889766
#394 #889766
>>889746
Зойчем тебе скачивать видео? Ты что, наркоман? Алсо, я как бы его смотрел (даже больше, лол) перед тем, как сюда вкинуть, сюрприз.

Ну и надеюсь ты сам понимаешь, как ты глупо выглядишь со стороны, признавая наконец, что ты выдумал эти слова (и на том спасибо, хех), но при этом продолжая нести ахинею в стиле "а вот если ты погуглишь то там будут хейтеры!! поэтому она тоже хейтер и ненавидит меня!!". Тут уж не привелегии, тут логику надо чекать.

>>889764
Вступительное слово посвящено комьюнити билдингу. И да, в цивилизованных белых странах это норма.
>>889771>>889773
#395 #889771
>>889766

>Зойчем тебе скачивать видео?


Потому что прогрессивные веб-технологии, блягодаря которым у меня ютуб не работает.

>я как бы его смотрел (даже больше, лол)


Интересно, и что же ты с ним делал? Наяривал на белобрысую, небось?
>>889776
#396 #889773
>>889766

>поинт как раз в том и состоит: "у меня есть пизда, но что имеет значение


>Вступительное слово посвящено комьюнити билдингу


комьюнити билдинг - это что-то вроде свинг вечеринок для трансгендеров?
>>889775>>889776
#397 #889775
#398 #889776
>>889771
Дай угадаю: в том, что у тебя не работает ютуб, виноваты проклятые американцы с их проклятыми трансами и проклятыми веб-технологиями, лол?

Ебаный цирк просто.

>>889773
Предлагаю вам тебе? починить ютуб, а потом погуглить про это, лол. По-английски местные иваны хоть шпрехают?
>>889782
33 Кб, 1280x720
#399 #889777
Не ругайтесь ребята! Давайте лучше обсудим монады.
>>889786
#400 #889782
>>889776

>Дай угадаю


Друг мой, да у тебя всё совсем плохо. Если сначала я ещё думал, что ты всего лишь не в теме, то чем дальше, тем больше убеждаюсь, что ты просто типичный сосачевский долбоёб. Вот ты уже нафантазировал и "лоллируешь".

>Предлагаю


>починить ютуб


А вот теперь я уже в его глазах стал гуглом.
>>889786
#401 #889786
>>889777
У меня такое чувство, что вместо гормонов она пьет пиво, лол.

>>889782
Я с тебя лоллирую с самого начала нашего конверсейшена, клоунишка, просыпайся. И ютуб почини, тяжпрограммист, лол.
#402 #889810
>>889786
Смузи с бороды стряхни, ангулярщик.
>>890289
#403 #889962

>поинт


>конверсейшена

>>889969
#404 #889969
>>889962
нам нужна физибл агенда.
107 Кб, 884x918
#405 #890119
Решил попробовать пройти курс по структурам данных решая задачки на хаскелле, и на второй уже обосрался.

Надо посчитать высоту дерева за разумное время, на вход подается две строки: первая - колво нод, вторая - список указателей на родительские ноды, у корневой этот указатель равен -1.

на пример:
5
4 -1 4 1 1

это такое дерево:
1
|\
3 4
/ \
0 2

На питоне решение написал, а на хаскеле не могу. Целый день просидел, ниче дельного в голову так и не пришло (хотя кажется что задача супер-тривиальная).

Анон, подскажи как переписать это на хаскел pastebin.com/mtXaNdNt
#406 #890124
>>890119
Сам вкатываюсь потихоньку. Я бы так сделал: функция, в которой берем элемент, берем следующий элемент по индексу из значения предыдущего элемента и т.д. пока не получим -1, . Рекурсивно применяем эту же функцию для следующего элемента. Возвращаем максимальное количество шагов, полученных проходом по элементам и в результате применения функции к следующему элемету.
>>890145
#407 #890127
>>889786

>У меня такое чувство, что вместо гормонов она пьет пиво


В 1952 году Алан Тьюринг был признан виновным по обвинениям в совершении «грубой непристойности» в соответствии с «поправкой Лабушера», согласно которой преследовали гомосексуальных мужчин. Тьюрингу был предоставлен выбор между принудительной гормональной терапией, призванной подавить либидо, или тюремным заключением. Учёный выбрал первое.
>>890130
#408 #890130
>>890127
Трап != пидор. Тем более что Тюринга заставили. И судя по фоткам он всегда был ухоженной стройняшей.

>>889786
Ну так современная ослиная моча которую называют пивом даёт тот же, хоть и слабый, эффект, но с побочками в виде пуза.
35 Кб, 633x386
#409 #890140
>>890119
суть строки:

> (+ 1) . maximum . map height $ children


для всех детей вызываем функцию height, находим максимум среди всех высот, добавляем 1
>>890145
#410 #890145
>>890140
>>890124

такое я уже писал, но оно не проходит тесты на больших деревьях (слишком долго считает), в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторно, а как сделать подобное в haskell варианте - хз
4 Кб, 302x256
#411 #890155
>>890145

>такое я уже писал, но оно не проходит тесты на больших деревьях


>пройденные ноды и не считаю их повторно


Поскольку мы имеем чистые функции, хаскель может кэшировать результат применения функции к набору уникальных значений аргументов. В этом плане тебе ничего запоминать не надо. А считает долго из-за иммутабельности, при каждом применении функции создается копия твоего дерева. Тебе надо дерево как глобальный объект представить, но я пока ХЗ как это сделать. И вообще я не понимаю зачем там что-то повторно считать нужно.
>>890180
#412 #890156
>>890145
хаскель делает такое из коробки, лол)
>>890180
#413 #890180
>>890145

>в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторно


А что, есть шанс при подсчёте высоты наткнуться на ноду больше одного раза? Это же дерево.

>>890155

> хаскель может


Даже кофе варить. Есть пруф что он варит?

> при каждом применении функции создается копия твоего дерева


С чего ты это взял?

>>890156
Пруф.
>>890197>>890204
#414 #890191
>>890119
Сдаётся мне, тут не нужно строить дерево.
>>890202
3 Кб, 425x196
#415 #890197
>>890180
Да, так лучше наверно будет.
А пруфов не будет, нужно верить.
>>890202
#416 #890202
>>890191
я и не строю, изначально мысль была следующая считать по порядку высоту для каждой ноды из списка на входе, попутно занося посчитанные ноды в отдельный список, чтобы не считать их по несколько раз, в принципе можно построить дерево, и посчитать его высоту как предлагали выше, но как сделать дерево из входного списка я тоже хз.

>>890197
у тебя вроде куска кода не хватает (deep2)
>>890207>>890214
#417 #890204
>>890145

>в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторно


Да, сорян, я тут >>890180 поторопился. Если ты не строишь дерево, то тебе, конечно же, нужна мемоизация.
Data.Map.Strict поможет, надеюсь.
#418 #890207
>>890202
боже, я уже по-русски писать разучился
#419 #890214
>>890202

>у тебя вроде куска кода не хватает (deep2)


Это собственно весь код и есть. Опечатка, deep1 конечно. Здесь не строится дерево. Кстати можно оптимизацию небольшую сделать, строить высоту только для листьев. То есть для тех элементов списка, индексов которых собственно в списке нет. То есть в примере получается для 0 2 и 3 элементов. Можно условие в генераторе списка зафигачить. Завтра подумаю.
>>890219
4 Кб, 533x194
#420 #890219
>>890214
Хотя чего тут думать-то.
>>890222>>890230
#421 #890222
>>890219
тоже пытался так сделать, но на большом (100000 элементов) списке все равно виснет.
>>890223>>890228
#422 #890223
>>890222

> используется (!!)


> чёт виснет


Miracle!
>>890228>>890230
#423 #890228
>>890223
>>890222
Ну да !! сложность O(n). Надо будет на массивах наверно переделать.
>>890229
#424 #890229
>>890228
А там и мемоизацию запилишь на массивах.

Короче, задача такая, что её решение никак не ложится на ФП "красиво".
>>890655
#425 #890230
>>890219
>>890223
вот я дурак конечно...
завтра переделаю с массивами вместо списков.
Спасибо всем!
>>890655
#426 #890289
>>889810

> implying angular is hipster


Как там в 2010?
6 Кб, 398x116
#427 #890655
>>890230
Ну ты как там, переписал? Вообще хорошая задачка, помогает разбираться. Я вот переписал с мемоизацией. Не проверял работает или нет, но по идее должно. Следующий этап будет - своя мемоизация на IntMap, прямо как вот этот >>890229 анон наванговал.
>>890732
25 Кб, 595x293
#428 #890730
наговнокодил на векторах, но гдето запутался. На больших инпутах не падает, но считает неправильно.

а что за плагин, который -> заменяет на →
>>890732>>890733
100 Кб, 772x630
#429 #890732
>>890730
>>890655

не тот скрин
#430 #890733
>>890730
Шрифт с лигатурами очевидно. Fira code, haskellig там.

Пойду дальше порофлю с того, как хаскелимакаки всем тредом не могут высоту дерева посчитать. Хороший язык.
98 Кб, 703x628
#431 #890755
опять проебался
>>890861
6 Кб, 399x260
#432 #890861
>>890755
Чет похоже на императивщину. Не знаю как ты большие деревья генеришь, но попробуй вот такой вариант.
Да, это FiraCode.
>>890863
#433 #890863
>>890861
Ты задолбал с deep. Глубина это depth.
А в задаче вообще просят height
#434 #890899
>>890119
Так, теперь быстро объясняй мне, почему высота дерева не равна количеству уникальных указателей
>>890901
#435 #890901
>>890899
Количество уникальных указателей: 2⁶⁴
>>890910
83 Кб, 1036x498
#436 #890910
>>890901
Ты дал совершенно даунский ответ на вполне понятно поставленный вопрос. Впрочем я и без тебя разобрался, не стоило
#437 #890912
>>890910
Даун, почему у тебя unit type обозначен значком пустого множества? Даже если выкинуть ⊥, то это не будет пустым типом.
>>890914
#438 #890914
>>890912
Даун, потому что создатели хаскелевого мода для имакса так считают, даун
>>890915
#439 #890915
>>890914
Значит создатели мода дауны. Как и пользователи.
>>890917
#440 #890916
>>890910
И где там указатели?
>>890917
#441 #890917
>>890915
Ясно. В ФП на уровне чуть выше рекурсии списков и мапов с филтрами наш многоуважаемый опущ не умеет. Иначе как объяснить что простейшая программа с мемоизацией при помощи State Monad оказалась ему не под силу Зато он умеет рассуждать о том, кто здесь даун, а кто не очень, рассматривая кастомные темы в чужих редакторах.
>>890916
Тебе пальцем показать, или лазерной указкой?
>>890918
#442 #890918
>>890917

>Ясно. В ФП на уровне чуть выше рекурсии списков и мапов с филтрами наш многоуважаемый опущ не умеет.


Откуда такие выводы?

> Тебе пальцем показать, или лазерной указкой?


Как тебе удобнее.
>>890919
#443 #890919
>>890918
Например оттуда, что я зайдя в тредик за 15 минут накатал программку. А ты сподобился выдавить из себя "даун, даун, даун" и, в общем то, всё

>Как тебе удобнее.


Справа в буфере с интерпретатором, поступают на вход с функции treeDepth
>>890921
#444 #890921
>>890919

>Например оттуда, что я зайдя в тредик за 15 минут накатал программку.


Молодец. Что не отменяет твоих незнаний элементарной теории множеств.

>Справа в буфере с интерпретатором, поступают на вход с функции treeDepth


Только treeDepth не считает число уникальных указателей.
>>890922
#445 #890922
>>890921

>Unit -тип содержащий один элемент


>Тип


>Теория множеств


Ясно, понятно

>Только treeDepth не считает число уникальных указателей.


Да, не считает. Зачем их считать, их ведь 2^64
>>890923
#446 #890923
>>890922
В общем, ты слился, как все любители попонтоваться.
#447 #890926
>>890910

>Ты дал совершенно даунский ответ на вполне понятно поставленный вопрос.


Нет, непонятно.

> Впрочем я и без тебя разобрался, не стоило


Что, с пруфом "высота дерева == числу `указателей'" не получается?
>>890927
#448 #890927
>>890926

>Что, с пруфом "высота дерева == числу `указателей'" не получается?


Что за бред ты несёшь?
>>890929
#449 #890929
>>890927
Какой ещё бред, даун? Это ты заметил, что высота дерева == числу уникальных указателей. Я тебя и спрашиваю, почему ты это не используешь. С пруфом проблемы?
>>890930
#450 #890930
>>890929
В предыдущем твоём посте ты проебал слово "уникальный", что изменило весь смысл на практически противоположный

>Это ты заметил, что высота дерева == числу уникальных указателей


Я попросил тебя переубедть меня. Ты не сподобился и я переубедил себя сам

>С пруфом проблемы?


Значение знаешь? Учи мемы чтобы не быть баттхёртом
>>890932
#451 #890931
>>890910
спасибо, анон, работает!

пиздец, 15 минут, а я третий день сижу...
#452 #890932
>>890930

>Ты не сподобился и я переубедил себя сам


Контрпример.

>Значение знаешь?


Пит буль.
#453 #890933
>>890931

>15 минут, а я третий день сижу...


Я уже давно написал: юзай Data.Map
>>890934
#454 #890934
>>890933
да я пытался вроде, правда без монады
>>890935
#455 #890935
>>890934
Гонять Map аргументом еквивалентно заворачиванию в State-монаду.
#456 #890936
>>890931

>пиздец, 15 минут


Решал раньше похожую задачу,на самом то деле, поэтому быстра. Так бы долго втыкал, наверное
>>890938
#457 #890938
>>890936
Где контрпример?
>>891075
#458 #890950
>>890931
Можешь просто считать список чисел в set и размер set будет путём.
>>890951>>890969
#459 #890951
>>890950
В смысле длиной самого длинного пути.
>>890969
#460 #890969
>>890950
>>890951
Хотя да, это неверно.
#461 #890984
>>890910
Сап, анон, напиши пожалуйста функцию najtiElementVMassive, а то я 3-й день уже сижу!
5 Кб, 391x257
#462 #891053
Аноны, а в такой реализации fun2 мемоизируется, так как определена в бесточечном стиле через memoFix2, то есть при вычислении высоты дерева из определенного узла должны использоваться закешированные значения высоты из вышележащего узла, если они уже вычислены конечно. И fun4 тоже мемоизируется, так как определена в бесточечном виде, а l исплоьзуется из области видимости where. То есть при при обращении к значению списка по индексу, только данное значение добавляется в массив (из-за ленивости), и при следующем обращении будет обращение уже к массиву по индексу. Или я где-то ошибся в рассуждениях?
>>891092
#463 #891055
Я так и нипонел, нахуй вы используете кокоето гавно, когда есть Data.Tree?
>>891057
#464 #891057
>>891055
Ну вот Хаскелл например учу, с мемоизацией хочу разобраться.
#465 #891064
>>890119
кстати, а ведь при таком условии нельзя сделать циклический граф, который будет связан с рутом, разве нет? Какой смысл в мемоизации?
>>891071>>891075
#466 #891071
>>891064

> Какой смысл в мемоизации?


Смысл в том, что дерево не строим.
На входе у нас есть пары (вершина, родитель) и высоту считаем для вершины считаем как 1 + высота_от_родителя_до_корня
>>891073
#467 #891073
>>891071

> высоту считаем для вершины считаем как


высоту для вершины считаем как
#468 #891075
>>890938
Сам придумывай
"4 -1 4 1 1 3" Высота по-прежнему 3, уникальных идентефикаторов - 4
>>891064
Потому что без мемоизации сложность по времени O(n^2)
>>891077
#469 #891077
>>891075

>Сам придумывай


Уже.
#470 #891092
>>891053
Аноны, поясните же, я все правильно понял или где-то ошибаюсь?
>>891468
#471 #891468
>>891092
мне кажется гдето ошибаешься, потому что тесты не проходит (виснет).

залил архив с тестами если интересно: http://rgho.st/6RdYLFPy9
#472 #891478
>>891468
Наконец-то тесты.
>>891515
10 Кб, 899x274
#473 #891515
>>890119
>>891468
>>891478
Раз уж появились тесты, решил попробывать написать.
Считает правильно, но медленно.
https://cpy.pt/HyxJaMkC
>>891548
11 Кб, 1207x290
#474 #891548
>>891515
Вот так обрабатывает 24 теста за 11 секунд
https://cpy.pt/KKBwUx8N
Используется https://hackage.haskell.org/package/multimap
self-fix #476 #891560
>>891548
В девятой строчке надо заменить
(Map.insert (-1) 1 Map.empty)
на просто
Map.empty

На ответ это не влияет, но текущий вариант выглядит странно. Никакой вершины (-1) нет
self-fix2 #477 #891562
>>891548
Да и, честно говоря, Map там нахрен не нужен. Попробую без него переделать.
>>891585
7 Кб, 883x219
#478 #891585
>>891562
9 секунд на все тесты
>>891676>>893139
#479 #891676
>>891585
на моем компе вариант этого анона>>890910 продит все тесты за 6 секунд

а вариант на питоне за три, лол
>>891680>>891806
#480 #891680
>>891676

>на моем компе вариант этого анона>>890910 продит все тесты за 6 секунд


А мой вариант за сколько?
#481 #891682
>>890910
Что за редактор?
>>891795
#482 #891795
>>891682
имакс жи, в треде написано
#483 #891806
>>891676
Можно ускорить выпиливанием ленивости через BangPatterns. Также, вместо IntMap можно мемоизировать ST массивом, и по идее это даст хороший прирост производительности, но код скорее всего получится не очень
>>892157
#484 #892118
>>891468
Ммм, как их выполнить? Даже как и гуглить не знаю то, лол
>>892157
#485 #892157
>>892118
это входные данные (номерные файлы) и результат который должен получиться (файлы с расширением .a)

для линукса - выше скриптик был, для винды - хз.

Кстати по условию задачи все тесты должны прогоняться за 2 секунды

>>891806
BangPatterns ничего не меняют, пытаюсь разобраться с ST монадой. Я правильно понимаю что мне надо поменять State (IntMap) на State(STArray) и написать еще один метод, который будет обновлять значения в этом STArray?
>>892176>>892408
#486 #892176
>>892157

>Кстати по условию задачи все тесты должны прогоняться за 2 секунды


Все или каждый?
>>892181
#487 #892181
>>892176
вроде как все, по крайней мере остальные две задачи получилось решить так, что бы за указанное время прогонялись все тесты
>>892182
#488 #892182
>>892181
Но ведь ты сдал вариант на хаскеле, который работает 6 секунд, хотя надо 2.
>>892187
#489 #892187
>>892182
нет еще, я только сегодня третью сделал и надо сначала курс оплатить

Вообще я собираюсь в скалу вкатываться (с языком знаком + есть небольшой pet-проект), и думал поделать эти задачки чтобы разобраться в чисто-функциональном подходе и лучше применять его на практике. Но пока это больше похоже на преодолевание искусственно созданных трудностей, чем на что-то действительно полезное. И собственно вопрос - стоит ли продолжать, или это изначально бессмысленная затея?
>>892188
#490 #892188
>>892187
Решение на haskell: 12 строк
Решение на педоне: 31 строка

правда, в Haskell MultiMap используется
>>892190>>892333
#491 #892190
>>892188
Ну пока лучшее решение на хаскелле - 25 строк. Насколько я понимаю узкое место там как раз IntMap с logn временем на поиск и добавление элементов, то есть надо переделывать на основе изменяемых массивов, а то что я пока нагуглил на эту тему выглядит как пиздец
>>892250
16 Кб, 807x504
#492 #892250
>>892190
4.5 секунды
>>892255
#493 #892255
>>892250
Ну и императивная дрисня получилась, однако.
>>892317
60 Кб, 765x358
#494 #892317
>>892255
Чуток быстрее (4.2-4.3 сек), из-за отсутствия лишних преобразований.
А может из-за хипстерского Атома.
#495 #892333
>>892188
Решение на педоне: сажает робота на марс
Решение на haskell: взрывается на старте из-за несоответствия временным критериям
Зато на пять строчек короче!
>>892336>>892340
#496 #892336
>>892333

>Real Time системы


>Пиздон


Мда, кек, что ещё скажешь?
#497 #892340
>>892333

> несоответствия временным критериям


Тому херу конечно виднее, но лично я сомневаюсь насчёт трёх секунд на все тесты.
3 секунды на 1 тест. Всё в порядке.
>>892355
56 Кб, 544x453
#498 #892355
>>892340
Passing a code problem requires implementing a solution that passes all the tests for this problem
in the grader and does so under the time and memory limits specified in the problem statement.
>>892370
#499 #892370
>>892355
В задании приводятся Constraints и TIme Limits, но не приводится число тестов.
Значит это Time Limits для данных Constraints.

> passes all the tests for this problem


in the grader and does so under the time and memory limits specified in the problem statement.
Ну да. А specified было так, как я описал выше.

Слюшай, думаешь, я не сидел в подобных решалках задач? Сидел (но немного, т.к. в моё время на выбор давались C++ и Pascal, а это уныло). Везде подразумевалось время на решение для одного примера входных данных

Кстати, на скрине время для какого языка и варианта?
>>892384
#500 #892384
>>892370
а может ты и прав...
на скрине - питон, код выше кидал
>>892387>>892391
#501 #892387
>>892384
https://cpy.pt/Hpdz9amL вот хачкель, последний вариант
#502 #892391
>>892384

>а может ты и прав...


Нет, ну сможешь создать условия, при которых каждый тест укладывается в ограничения, а в сумме они не укладываются и система зарежектит такой вариант, то ок.
Но это крайне маловероятно. Сегодня набор тестов один, завтра — другой. Ограничения на время указывают для ограничений на размер входных данных.
#503 #892399
В чем разница между выражением и лямбда функцией? Если опустить технические детали это же одно и тоже?

Зы. Читаю книгу по лиспу какого-то финна
>>892427
#504 #892408
>>892157

>для линукса - выше скриптик был,


Покажи. Либо его нету либо я долблюсь в глаза
>>892409
#505 #892409
>>892408
https://cpy.pt/Y1R263zg
если одну строчку сверху можно назвать "скриптиком"
#506 #892427
>>892399

> 2016


> lisp


Lisp способен даже C++ оставить далеко позади в соревновании по написанию неподдерживаемого кода.
>>893407
32 Кб, 686x260
#507 #892490
Просто оставлю это здесь.
#508 #892842
>>892317
Напейсал на цепепе.
0.45-0.55 с. на все тесты.

Кек.
>>892874
17 Кб, 829x630
#509 #892874
>>892842
Вот код
>>893032
#510 #893032
>>892874
Ну молодец. Цель то была на хаскелле написать
>>893044
#511 #893044
>>893032
уже написал >>892317
>>893122
5 Кб, 517x206
#512 #893122
>>893044
Трай зис. У меня на всех тестах достаточно быстро выполняется.
#513 #893132
>>893122
Скидывай сорцы уж. У меня OCR нет.
>>893134
#514 #893134
>>893340
#515 #893135
>>893122
Ну заранее могу пованговать. Твой вариант похож на мой код с массивами, только у тебя Map, т.е. доступ к элементам заведомо медленнее.
>>893144
#516 #893139
>>893122
7.1-7.2 секунд
чуть быстрее чем >>891585
и медленнее массивов >>892317, как я и ванговал
#517 #893144
>>893135
Вот только например на 20 тесте твой массив будет иметь 100000 элеметов, а мой мап всего 2. Аналогично на других тестах, мап будет содержать не так много элементов, как кажется - только для уникальных узлов
>>893157>>893171
#518 #893152
Вообще в IRC мне посоветовали STUArray заменить на https://hackage.haskell.org/package/vector

Помимо прочих ништяков, он Foldable, т.е. для нахождения максимума не нужно перегонять его в список.

Как мне кажется, отчего Хаксель больше страдает, это от переупаковок данных туда-сюда. Из строки в список чисел, из списка чисел в массив, анбоксинг, боксинг Int-ов, опять превращение в список и т.д. Создание списка для mapM_, только для того, чтобы вызвать функцию для каждого номера вершины.
>>893181
#519 #893157
>>893144

>Вот только например на 20 тесте твой массив будет иметь 100000 элеметов, а мой мап всего 2.


И всё равно работает медленнее.

Array выделяется 1 раз и хранит unboxed Int-ы (если это STUArray/IOUArray; U = Unboxed). А Map зделан поверх дерева, при доступе и добавлении куча сравнений и хождения по указателям.
>>893203
#520 #893171
>>893144
Как-то странно экономить память на массиве, когда создаётся несколько списков, длина которых линейна от числа вершин.
#521 #893181
>>893152

>Как мне кажется, отчего Хаксель больше страдает, это от переупаковок данных туда-сюда.


Хотя нет, даже не от этого. От нестрогости. Для того, чтобы найти высоту дерева, нужно узнать высоты ВСЕХ поддеревьев. Т.е. задача сама по себе "энергичная". И нестрогий язык заведомо проиграет, т.к. будет бесполезно тратить время на создание thunk-ов, которые всё равно все будут вычислены.
>>893195
#522 #893195
>>893181
BangPatterns же должны от этого спасать?
#523 #893203
>>893157
Ладно, уговорил. Давай так тогда
http://pastebin.com/q03JXZ19
>>893214
#524 #893214
>>893203
Ошибся. Вот так правильно
http://pastebin.com/yRkPrQqr
>>893262
#525 #893262
>>893214
Вау, всего лишь в 10 раз медленнее лиспа.
#526 #893299
>>893262
Пруф?
>>893318
39 Кб, 944x445
46 Кб, 964x477
#527 #893318
>>893299
А ты сомневаешься что ли?
>>893335>>893412
#528 #893335
>>893318
Хм, то есть вариант с асс. массивом за 7.1-7.2 сек отрабатывал, а вариант с линейным массивом за 30?
#529 #893337
>>893335
У того анона эвм явно помощнее была.
>>893341
#530 #893340
>>893335
Эта версия >>893134 у меня за 52.7сек отрабатывает.
>>893342
#531 #893341
>>893337
А я то думал ты он и есть. Вообще надо на Unboxеd массивы переписать, они побыстрее должны быть.
#532 #893342
>>893340
Ну тащемта выигрыш от массивов все-таки есть. И че там на лиспе получилось?
>>893356
#534 #893359
>>893356

>)))))))


Слишком экстремально для меня.
>>893389
15 Кб, 501x162
#535 #893389
>>893359
Зато более практичный и удобный для разработки.
Хаскел же годится только для изъебств типа пикрелейтед.
#536 #893405
>>893335
Он явно не включал оптимизации.
>>893410
#537 #893406
>>893262
Если даже медленнее питухона, то явно медленнее лишпа. Никто не сомневался.
#538 #893407
#539 #893410
>>893405
Ты явно не смотрел скриншот.
>>893411
#540 #893411
>>893410
kk
Значит показал не весь код на лишпе. Наверняка там в первой строке (declaim (optimize (speed 3) (safety 0) (debug 0)))
>>893413
#541 #893412
>>893318
Замерь цепепе у себя
https://cpy.pt/m4QQ7S8W
>>893413
37 Кб, 954x419
#542 #893413
>>893411
Весь. declare было в tree-height, но оно даёт ускорения на ~0.2-0.3сек, поэтому и убрал
>>893412
>>893415
#543 #893415
>>893413
Что у тебя за спеки, если всё так тормозит?
>>893416
#544 #893416
>>893415
атом, которому уже почти с десяток лет
>>893417
#545 #893417
>>893416
Ну, в принципе, отношение скоростей кода на Haskell к коду на C++ у тебя более-менее близко к моему.
#546 #893424
>>893262

>Вау, всего лишь в 10 раз медленнее лиспа.


Ты, конечно, сравнил.
Haskell функциональный, Lisp императивный.
>>893911
#547 #893449
Хули не перекатываетесь?
>>893459>>893912
#548 #893459
>>893449
Лень.
>>893491
#549 #893491
>>893459
Пидоры.
#550 #893911
>>893424
Во-первых, не императивный, а мультипарадигменный, во-вторых, дело не в этом.
>>894014
#551 #893912
>>893449
Сам и перекати
>>894025
#552 #894014
>>893911
Главное, что не функциональный.
http://lispnik.livejournal.com/130098.html?thread=398898#t398898
>>894784
#553 #894025
>>893912
Я не оп же.
>>894549
#554 #894549
>>894025
Перекатишь — станешь.
>>894699
#555 #894699
>>894549
Я боюсь. Вдруг накосячу.
#556 #894784
>>894014
Не __чисто__функциональный. Чуешь разницу?
>>894822
#557 #894822
>>894784
Под не __чисто__ функциональный можно подвести что угодно.
>>894833
#558 #894833
>>894822
Все не __чисто__ функциональные языки являются __чисто__ мультипарадигменными
>>894857
#559 #894857
>>894833

>мультипарадигменными


Ничего не значащий баззворд. Типа "гибридное ядро" и т.п.
PEREKOT Perekoter !JLHGEtxGTk #560 #894905
ПЕРЕКОТ в тред >>894904 (OP)
Тред утонул или удален.
Это копия, сохраненная 23 декабря 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски