[Ответить в тред] Ответить в тред

02/12/16 - Конкурс визуальных новелл доски /ruvn/
15/11/16 - **НОВЫЙ ФУНКЦИОНАЛ** - Стикеры
09/10/16 - Открыта доска /int/ - International, давайте расскажем о ней!



Новые доски: /2d/ - Аниме/Беседка • /wwe/ - WorldWide Wrestling Universe • /ch/ - Чатики и конфочки • /int/ - International • /ruvn/ - Российские визуальные новеллы • /math/ - Математика • Создай свою

[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 559 | 57 | 121
Назад Вниз Каталог Обновить

Функциональное программирование №2 Аноним 14/11/16 Пнд 21:01:39  875637  
.png (7Кб, 375x375)
Функциональное программирование

Книги
Types and Programming Languages ru: http://rgho.st/79l9wvVcQ en: http://rgho.st/8tSBffPsH
Structure and Interpretation of Computer Programs ru: http://rgho.st/8MgrHrCcc en: http://web.mit.edu/alexmv/6.037/sicp.pdf
Introduction to Functional Programming ru: http://rgho.st/7mf8HCkmx


Haskell

https://hackage.haskell.org/
https://wiki.haskell.org/Haskell
https://www.haskell.org/documentation

Книги
Real World Haskell en: http://book.realworldhaskell.org/
Learn You a Haskell for Great Good ru: http://rgho.st/6NzMmnvDS en: http://learnyouahaskell.com/ http://rgho.st/6QLkJb5jT
Учебник по Haskell https://anton-k.github.io/ru-haskell-book/book/home.html
Beginning Haskell en: http://rgho.st/8pG4TYdnp


Clojure

http://clojure.org/
http://clojurescript.org/
http://www.learn-clojure.com/
http://www.braveclojure.com/
https://youtube.com/user/ClojureTV
https://clojuregazette.com/

Книги
Clojure Programming http://rgho.st/7wGxqJj54
The Joy of Clojure http://rgho.st/6dyRBG9rg


OCaml

http://caml.inria.fr/pub/docs/manual-ocaml/
https://ocaml.org/docs/

Книги
Real World OCaml en: http://rgho.st/6gCfxmLyy


Архив тредов
1. https://arhivach.org/thread/214184/
Аноним 14/11/16 Пнд 21:04:15  875639
To do list: >>873057
Аноним 14/11/16 Пнд 21:14:05  875645
Кложура же в лиспотреде обсуждается, в верблюд не нужен никому, просто Хачкиль-тред сделал бы.
Аноним 14/11/16 Пнд 21:19:31  875649
>>875645
Да ладно тебе, здесь же по идее обсуждают особенности функциАнальной парадигмы. Существуют различные функциональны языки для веба(elm, purescript). не вижу ничего плохого в обсуждении clojure и здесь. более того, можно обсуждать фп фичи в мейнстримных языках(c#, js..). нутыпонял
Аноним 14/11/16 Пнд 21:31:11  875653
>>875645
Еще к бамплимиту прошлого треда определились же, что самые обсуждаемые языки в треде - хаскель и кложурь. Кложурь настолько же лисп, насколько и то, что обычно называют "фп". А без эм-эля фп-тред пилить... как-то совсем странно. Так что все норм. К тому же тут общие вопросы можно обсуждать, а в треде про хачкель это бы странно смотрелось. Короче - все ок.
Аноним 14/11/16 Пнд 21:38:55  875657
beautiful-newli[...].png (34Кб, 399x719)
Аноним 14/11/16 Пнд 21:44:31  875661
Сами книги на рыгхосте зачем?

>>875645
Это.
Аноним 14/11/16 Пнд 21:46:42  875662
>>875653
>определились
>самые обсуждаемые языки в треде
>кложурь
Сам же зафорсил в прошлом треде, сам же определился и сам же перекатил. Браво! 10 хитрых планов из 10.
Аноним 14/11/16 Пнд 22:04:55  875668
двачую за кложурь, она тут нужна. Единственный нормальный функциональный лисп.
Аноним 14/11/16 Пнд 22:20:00  875678
haskell.png (65Кб, 1440x860)
Beginning Haskell
Брал вот здесь
http://wayupload.com/pfsydsj2jlk7.html
Аноним 14/11/16 Пнд 22:31:39  875686
>>875668
>Единственный нормальный функциональный лисп.
Ну а как же жаваскрипт?! Мммм? Давайте и его в шапку добавим.
Аноним 14/11/16 Пнд 23:44:38  875730
>>875678
>Инжиниринг магазина
Что, простите?
Аноним 15/11/16 Втр 00:20:38  875755
Поясните за котлин. Кроме андроеда - никуда?
Аноним 15/11/16 Втр 00:30:06  875763
>>875662
Таблетки прими, поехавший.
Аноним 15/11/16 Втр 00:32:11  875766
>>875755
Ненужно. Вся суть котлина - это нескучные обои. Вообще, не рекомендую обращать внимания на языки, за которыми не стоит академического рисёрча или крупной корпорации.
Аноним 15/11/16 Втр 00:54:51  875776
>>875730
На протяжении всей книги ты как-бы делаешь на Хаскеле интернет-магазин, продающий машины времени.
Аноним 15/11/16 Втр 01:05:23  875781
>>875637 (OP)
Аноны, подскажите что - нибудь почитать про фп. Не про синтакс отдельного языка, а чтобы вообще в целом и желательно на английском языке.
Аноним 15/11/16 Втр 01:07:59  875783
>>875776
>2016
>Хаскель IRL никому не нужен
>Используя машины времени перенесемся на 20 лет вперед и увидим, что функциональное программирование победило!
>2036
>Человечество уничтожено роботами
>Их ИИ написан на Javascript
>FUUUUUUUUUUUUUU
Аноним 15/11/16 Втр 02:11:54  875821
>>875781
-> >>873057
Начни с введения в фп Харриса: http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/
Или sicp. У тебя какой уровень примерно?
Аноним 15/11/16 Втр 07:52:15  875866
Думаю, будет полезно добавить этих ссылок на видео...
https://www.youtube.com/playlist?list=PLbgaMIhjbmEm_51-HWv9BQUXcmHYtl4sw
https://www.youtube.com/playlist?list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_
Аноним 15/11/16 Втр 07:56:15  875867
Propositions as[...].webm (4247Кб, 1280x720, 00:00:31)
Аноним 15/11/16 Втр 09:16:05  875872
>>875637 (OP)
Чё такое лямбда?
Аноним 15/11/16 Втр 09:26:43  875873
>>875872
Ононимнайа функцейа
Аноним 15/11/16 Втр 09:52:22  875880
>>875645
У верблюда больше применений в реальном мире, чем у хаскелля, с чего это он вдруг стал не нужен?
Благодаря фейсбуку скоро и фронтендеры на окамледиалект переходить начнут.
Аноним 15/11/16 Втр 09:59:52  875883
>>875872
>Чё такое лямбда?
Буква греческого алфавита.
>>875872
>Ононимнайа функцейа
Это вам большие знатоки ФП на джаве рассказали?
Аноним 15/11/16 Втр 10:04:40  875885
>>875883
А без талмуда теории по лямдбда калькулусу это как-то ещё описывается на языке простолюдинов? Посвяти уж.
Аноним 15/11/16 Втр 10:08:25  875888
>>875885
Ещё раз, λ - буква греческого алфавита. Без талмуда
Аноним 15/11/16 Втр 10:14:08  875889
>>875885
Какой такой талмуд? В том же TaPL на весь нетипизированный лямбда калкулус страниц 20 наверное отводится.
Лямбда — это буква. Если тебе интересно, что такое лямбда-терм — так и спрашивай. Но в этом случае я отправлю тебя читать TaPL
Аноним 15/11/16 Втр 10:15:20  875890
>>875889
>Какой такой талмуд?
Барендрегт.
Аноним 15/11/16 Втр 10:18:27  875891
>>875890
Это для задротов PLT-теоретиков и математиков. Для software engineer'ов, коими в основном являются адепты ФП, такое чтиво бесполезно.
Аноним 15/11/16 Втр 10:19:47  875892
>>875891
> определение из javы для software enineerов не нравится
> литература для задротов не нравится
определись уже
Аноним 15/11/16 Втр 12:24:57  875937
>>875873
Типо как в JS
() => {
return "блядь";
}
?
Аноним 15/11/16 Втр 12:38:04  875952
>>875657
Ну и что ты этим хотел сказать?
Аноним 15/11/16 Втр 13:19:49  875973
>>875637 (OP)
Что скажете об этой https://www.ohaskell.guide/pdf/ohaskell.pdf книге? Алсо залил >>875678 на рыгост http://rgho.st/6gSbS8pGz
Аноним 15/11/16 Втр 13:20:51  875974
>>875661
> Сами книги на рыгхосте зачем?
Тому что удобно
Аноним 15/11/16 Втр 13:21:10  875975
>>875973
Для тех, кто совсем не знаком с программированием или знаком очень поверхностно.
Аноним 15/11/16 Втр 13:22:25  875976
>>875974
Зато курировать это затрахаешься.
Смысл делать из сосача флибусту?
Аноним 15/11/16 Втр 14:48:53  876021
>>875639
>надо добавить книжки, переведенные нашим русско...
Пиздец говноедство!
Аноним 15/11/16 Втр 14:56:57  876028
>>876021
Специально для тебя я добавил в шапку английские версии книг
Аноним 15/11/16 Втр 15:45:24  876054
>>875867
Был бы я тян, я бы хотел, чтобыьон меня удочерил и выебал. Вадлер ван лав! Гив ит ап фор ве лямбдамен!
Аноним 15/11/16 Втр 15:46:32  876055
>>875937
Почти.
Аноним 15/11/16 Втр 15:49:27  876059
>>876021
Дебил, наше комьюнити перевело несколько самых мастрид книг по цс. Никто не заставляет тебя читать их на русском - просто это отличный список чтения.

Алсо, детектирую в тебе школьника, русофоба и латентного ватника.
Аноним 15/11/16 Втр 16:56:08  876099
>>876021
Вот и объективные мнения подъехали...
Аноним 15/11/16 Втр 18:44:09  876167
>>875821
Уровень джава макаки. Рекурсии последний раз писал в универе на лабах.
Аноним 15/11/16 Втр 18:53:12  876182
>>876167
А интерес теоретический (узнать, откуда все берется и как оно работает) или практический (начать писать более лучший код)?

Мне кажется, тебе больше подойдет или sicp, или htdp. Но второй совсем для начинающих, тебе будет скучно, наверное. Так что да, наверное лучше sicp. Писать можешь в plt racket, он сразу идет с простенькой, но удобной ide, зиро конфигурейшен.
Аноним 15/11/16 Втр 19:04:15  876191
>>876182
Посмотреть с функциональной стороны на код, что-то новое открыть для себя, ну и в планах перекат на эрланг или хаскель.
Аноним 15/11/16 Втр 19:21:31  876208
>>876191
Ну дак вкатывайся сразу в хаскель.
Аноним 15/11/16 Втр 19:45:07  876238
>>876208
"Cразу в хаскель" - совет уровня /б.))
Вкатываться буду в то, что будет популярным и востребованным.
Аноним 15/11/16 Втр 20:00:52  876258
>>876238
У тебя есть гарантии, что хотя бы один фп язык станет мейнстримным? 10 лет назад никто не вспоминал про ФП, потом функциональные фичи начали добавлять в популярные языки. Нет уверенности, что нынешний интерес не угаснет. Я начал изучать ФП с хаскелля и тебе советую, в любом случае потом будет легче выучить любой функциональный язык. Если тебя интересуют карьерные возможности, то лучше либо закрыть этот тред, либо учить скалу, хоть это и мультипарадигменный язык и он тебе не даст той базы фп, которую мог бы дать хаск.
Аноним 15/11/16 Втр 20:04:39  876263
>>876238
> что будет популярным и востребованным
Тогда что ты здесь делаешь? Хаскель никогда не будет популярным и востребованным. Если ты действительно хочешь "популярный и востребованный" язык, то тебе в питон/пхп/жс/жаба-тред
Аноним 15/11/16 Втр 20:12:19  876277
>>876258
Спасибо, сейчас мне твой ответ показался более убедительным.
Аноним 15/11/16 Втр 20:15:24  876279
>>876258
>учить скалу
Языки смысла нет "учить". Синтаксис отдельного языка при некотором опыте осваивается быстро.
По хорошему учат сами модели в общем и как оно работает. Но раз на Хаскеле легко понять всю функциональную кухню, то возьмусь за него.
Аноним 15/11/16 Втр 20:46:06  876308
>>876238
неверно. ФП вообще сейчас в принципе не очень востребован, понимать его есть смысл лишь для "изменения чего-то в мозгу", чтобы применять это в других языках (тот же redux в жсе). Тут можно и сразу хаскель, ибо с ним это "изменение" произойдет максимально быстро. А после уже пиши на любом языке, каком хочешь.
Аноним 15/11/16 Втр 21:23:33  876333
>>875880
фронтендер на clojure, заинтересовал синтаксис этого reason. Но по нем очень мало инфы. Меня, например, интересует интероп с js-ом. Есть какая информация? Или он еще WIP (коммиты не самые активные)?
Аноним 15/11/16 Втр 21:46:34  876346
>>876333
>Easy to use js_of_ocaml integration.
>Compiler from OCaml to Javascript.
Аноним 15/11/16 Втр 22:50:24  876393
>>876258
Я бы советовал скалу тем кто уже работает с джавой (именно работает, а не просто знает). Изучать по отличной книге https://www.manning.com/books/functional-programming-in-scala. Не уверен что у неё есть аналог для хаскеля. Из-за FPiS я даже иногда думаю что скала может быть первым ФЯП, но на работе убеждаюсь в обратном.
Аноним 15/11/16 Втр 23:18:31  876409
>>876393
Чем она плоха?
Аноним 16/11/16 Срд 00:49:41  876455
>>875880
>Благодаря фейсбуку
Фєйсбук юзает Haskell
Аноним 16/11/16 Срд 01:16:20  876466
>>876455
https://facebook.github.io/reason/
Аноним 16/11/16 Срд 01:20:32  876470
>>876455
Т.е. https://github.com/facebook/pfff
Аноним 16/11/16 Срд 02:27:20  876481
>>876470
>>876466
https://www.youtube.com/watch?v=sl2zo7tzrO8
Аноним 16/11/16 Срд 02:38:18  876483
>>876481
Я где-то отрицал, что он юзает haskel?
Аноним 16/11/16 Срд 11:26:59  876559
coq-logo.png (309Кб, 577x640)
Почему про зависимые типы и пруверы ничего в шапке нет?
Аноним 16/11/16 Срд 12:07:20  876569
B2GrBMMCEAAafaS[...].png (180Кб, 1024x839)
>>876559
>пруверы
Аноним 16/11/16 Срд 12:54:54  876597
>>876409
Это гибридный язык, изначально не предназначеный не для pure functional programming, а для взаимодействия с джавовой экосистемой. Из чего вытекает переусложненный (для ФП) синтаксис, сложная система типов, отсутсвиве контроля над эффектами и стандартных тайпклассов в стандартной библиотеке.
Подробнее: https://www.reddit.com/r/haskell/comments/1pjjy5/odersky_the_trouble_with_types_strange_loop_2013/cd3bgcu/
Аноним 16/11/16 Срд 13:53:59  876631
Аононы, такой вопросик. Допустим надо разбить стрку произвольной длины на список строк фиксированной длины. Решение в лоб, которое я вижу - рекурсивно перебирать элементы строки и инкрементировать счетчик, счетчик достиг порога - добавляем строку в список, не достиг - делаем конкатинацию. Но как мне кажется решение по производительности не не очень оптимальное. Вот объясните, как можно решить задачу боле оптимальным способом, и какой у вас ход мыслей был при поиске решения. Хотелось бы в целом понять, разницу в мышлении функциональщика и императивщика. Я вот будучи закостенелым императивщиком привел решение скорее таки в императивном стиле.
Аноним 16/11/16 Срд 14:38:48  876652
chunk _ [] = []
chunk n list = chunked ++ chunk n dropped where chunked = take n list; dropped = drop n list

Как-то так, наверно, не проверял. В общем без счётчика можно обойтись, я думаю.
Вообще есть функция chunksOf :: Int -> [e] -> [[e]]
Аноним 16/11/16 Срд 15:19:56  876666
>>876631
выше уже кинули решение в принципе
Аноним 16/11/16 Срд 15:28:06  876670
>>876652
>>876666
Ок, спасибо. Я вот стал смотреть функции для работы со списками, а почему вы решили использовать take\drop, а не splitAt, например?
Аноним 16/11/16 Срд 15:45:40  876675
>>876670
take\drop как-то в первую очередь приходят в голову.

>>876666
Лол, честно не видел.
Аноним 16/11/16 Срд 16:10:35  876685
>>876675
> Лол, честно не видел.
это я к тому, что мое решение дублировало то, что выше) Но решение выше моего скрина не совсем верное из-за ++ вместо :
> Ок, спасибо. Я вот стал смотреть функции для работы со списками, а почему вы решили использовать take\drop, а не splitAt, например?
splitAt использовать конечно лучше. Другое дело, что take/drop - частоиспользуемые функции в разных ФЯП, а вот про splitAt я как не хаскельщик вообще не знал
Аноним 16/11/16 Срд 19:14:39  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
Аноним 16/11/16 Срд 19:46:28  876798
>>876770
нет
> where chunk = take n
означает, что в chunk - функция [a] -> [a]. И вот ты склеиваешь эту функцию с (chunks n rest), где ты передаешь в chunks другую функцию [a] -> [a] (из rest). Возможно, такое можно как-то сделать через композицию, но имхо все усугубляет читаемость кода
Аноним 17/11/16 Чтв 17:28:53  877333
Еще такой вопросик. Я применяю функцию к аргументу типа с достаточно большим количеством именованных полей. Вот собственно как мне добраться до значения каждого поля? Типо только так?
myf (MyType {field1 = f1, field2 = f2}) = MyType {field1 = f1 + f2, field2 = f2 + f1}
Тогда получится, я больше развертку field1 = f1, field2 = f2, ... буду описывать, чем логику самой фукнции. Есть способ как-то это дело сократить?
Аноним 17/11/16 Чтв 17:59:22  877372
Здесь есть люди, которым нечем заняться и они готовы слушать мои метафизические маняидеи в попытке создания ИИ?
Аноним 17/11/16 Чтв 19:52:32  877459
>>877372
Да
Аноним 17/11/16 Чтв 19:56:05  877460
>>877372
да
Аноним 17/11/16 Чтв 20:02:09  877462
.jpg (6Кб, 200x153)
>>877372
Да, я только ради этого и держу этот тред в закладках
Аноним 17/11/16 Чтв 21:02:34  877512
>>877459
>>877460
>>877462
И Вы будете помогать мне ради всеобщей цели всего человечества?
Аноним 17/11/16 Чтв 21:14:58  877522
>>877512
Давай рассказывай уже
Аноним 17/11/16 Чтв 22:25:04  877557
>>877522
Ну, я чуток стесняюсь да и мои идеи бредовые, я хорошо стукнулся головой.

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

Еще ИИ хорошо бы было дать возможность осознанных, то есть применять когда надо, когнитивных искажений. https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B3%D0%BD%D0%B8%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D1%85_%D0%B8%D1%81%D0%BA%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9

Особенно хорошим мне кажется, возможность заменять чувства, то есть https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D0%B5%D1%81%D1%82%D0%B5%D0%B7%D0%B8%D1%8F

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

У аутистов есть некая привязанность к объектам. То есть, тебе говорят что-то вроде кактуса, а тебя самого даже чуть покалывает. Но это подобно чуть к синестезии. Кстати, есть такая фоносемантика, так она изучает само звуковое строение слова и то как оно влияет на восприятие человека. Я даже часто замечаю на себе, что часто излишне импульсивен и сужу по информации по проигрыванию в себе некой пластинки с ней и таким образом строя несложную ментальную модель, то есть, в том смысле, почему люди дали именно такое название тем или иным событиям, явлениям, предметам. К слову, довольно таки неплохо получается.В этом ключе мне нравится некая комбинация фоносемантики и теории очевидностей https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%94%D0%B5%D0%BC%D0%BF%D1%81%D1%82%D0%B5%D1%80%D0%B0_%E2%80%94_%D0%A8%D0%B0%D1%84%D0%B5%D1%80%D0%B0

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

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

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

Впрочем, я довольно таки недавно ударился головой, да и я теоретик-хеллоувордщик, так, что пожалуйста не бейте сильно. Даже может бы книжку какую-то умную дали. Большинство людей говорит, что то, что я пишу это шизофазия.
Аноним 17/11/16 Чтв 22:27:00  877559
>>877557
Кстати, я думаю, что есть некий круговорот информации в природе. То есть, как круговорот воды, но информации.
Аноним 17/11/16 Чтв 22:35:18  877569
>>877557
>Даже может бы книжку какую-то умную дали.
В ОП-посте в принципе список книг есть, можешь начать с "Learn You a Haskell for Great Good". Очень неплохая книга для новичка.
Аноним 18/11/16 Птн 03:59:21  877689
>>877557
>Я думаю, что связи между нейронами в мозгу можно представить как грибницу. https://core.ac.uk/download/pdf/6117416.pdf здесь есть математическая модель развития мицелия. В купе с импульсными нейронными сетями это должно что-то дать по моему. Грибница разума.

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

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

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

Зеркала == отражатели. Типо испускаемую энергию направлять обратно, типо для "самовозгарания", йопта.
Аноним 18/11/16 Птн 11:05:16  877748
У меня бэкграунд джавовский, сейчас полгода пишу на скале и пытаюсь перестроить голову на фп. И вот я не понимаю, как классическую схему с контроллерами, сервисами и репозиториями перенести на фп.
Предположим у нас есть контроллер, который вызывает сервис, который делает какую-то логику, сохраняет сущность в репозиторий, генерирует ивент, отсылает письмо на почту. Т.е. делает три сайдэффекта. Сайдэффектами мы с помощью монад управляем. Ок, но у меня монады же разные. Типа DbMonad, EmailMonad, еще какая-нибудь монада.
Видел варианты решения с трансформированием монад, вариант возвращать функцию, а не монаду и где-то на самом верху эту функцию вызывать. Но если у меня монады не могут трансформироваться одна в другую? В скале в принципе все к фьючур трансформировать можно так или иначе, но если я не хочу фьючур. Или, если лямбды возвращать, то в итоге нехуевый такой граф зависимостей для лямбды наверху может получиться, что не есть гуд.
В ооп все просто было - заинжектил зависимость и хуяришь, а тут пока все способы не выглядят многообещающе. Есть что почитать, посмотреть на эту тему?
Аноним 18/11/16 Птн 11:49:42  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
Последнее видео вообще хорошо показывает чем хорошо ФП.
Аноним 18/11/16 Птн 12:18:37  877769
>>877760
Благодарю
Аноним 18/11/16 Птн 12:59:15  877783
>>877760
По второй теме: http://www.cakesolutions.net/teamblogs/2011/12/15/dependency-injection-vs-cake-pattern
Аноним 18/11/16 Птн 17:44:59  877895
p0001253[1].jpg (36Кб, 450x357)
Есть два типа заявок - 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

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

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

Анон, куда сам сядешь, куда SPJ посадишь?
Аноним 18/11/16 Птн 20:23:14  877985
>>876666
Два прохода по списку, ну-ну.
Аноним 18/11/16 Птн 20:29:40  877988
>>877950
Учитывая, что лицорукакнига набрала команду компилер-девелоперов (которые и пилят всю эту йобу) только из-за того, что не хотела уволнять пхп-девелоперов, логично предположить, что ризон она пилит по той же причине. Короче, я бы подождал пару лет минимум.

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

Через десять лет слова "мл-лайк лангуаж" будут вызывать те же чувства, что сейчас вызывают "си-лайк лангуаж".
Аноним 18/11/16 Птн 20:42:34  877995
>>877988
>только из-за того, что не хотела уволнять пхп-девелоперов
В этом есть что-то плохое? Девелоперов сохранили, да и сам пхп стал лучше, чем 5 лет назад в том числе благодаря книге — сплошной шин же.

>Алсо, как у него с интеропом?
На одном уровне с пюрэ. Разве что с документацией BuckleScript придется чуть-чуть ознакомиться.
>external now : unit => int = "Date.now" [@@bs.val];
И кроме всего прочего, в ризон уже реализовали JSX. Если бы JSX и встроенные опциональные аргументы был в пюрэ — я бы даже не задумывался о выборе языка, а то читать списки списков как-то все не привыкну.
Аноним 18/11/16 Птн 20:49:42  877997
>>877988
>Алсо, как у него с интеропом?
Оно компилируется в обжектив верблюда, у которого есть компиляторы в жс, жяву, натив и собственный байткод.
Нутыпонел.
>мл-лайк лангуаж
А что не так-то? Прекрасный синтаксис. Хочешь фичастости — всякие GADT и модули пофичастее чем в хаскеле, хочешь быстрый код — пиши циклы с указателями.
Аноним 18/11/16 Птн 20:55:21  878002
>>875637 (OP)
Аноны, что там сейчас из библиотек/фреймворков хаскеля для GUI используют? Или это моветон писать такое на нем?
Аноним 18/11/16 Птн 21:01:38  878009
>>878002
>это моветон
Это. На хачкелле можно писать только кластеры метапарадигм.

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

Если хочешь имхоты — возьми WPF, там даже F# есть (мл-потобная залупка, хоть и с уклоном больше в сторону ооп) и наслаждайся жизнью.
Аноним 18/11/16 Птн 21:05:05  878016
>>877995
> шин же
Шин-то может и шин, но от компании, которая переписывает компилятор языка из-за того, что у них сайт на этом языке тормозит, можно ожидать чего угодно. Сегодня пилят, завтра не пилят. Ненадежно.

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

Я не про синтаксис, а про то, что сейчас ПАТТЕРНЬ МЯЧИНГ и ТИИИПЫЫЫЫ - это модно, и языки штампуются (и будут штамповаться) бездумно и безыдейно, а через десять лет всю эту кучу говна придется разгребать. В этом смысле хачкель ничем не лучше крестов или джавы.
Аноним 18/11/16 Птн 21:22:05  878023
>>878016
>Сегодня пилят, завтра не пилят. Ненадежно.
Да похуй абсолютно, лол.
Во-первых — там весь проект состоит из замены кейвордов и различных скобочек с символами на окамловские. Даже если что-то поломается - проект небольшой, исправить не сложно.
Во-вторых — у тебя конечно сплошной фейсбук, который однажды переписав на новый модный и красивый язык/фреймворк - и все, пиздец.
>с ффи заебетесь
Ну всякие скалажс и кложаскрипты живут же.
>это модно, и языки штампуются (и будут штамповаться) бездумно и безыдейно
До этого было то же самое — все копаются в жяве и крестах и живы, здоровы хотя про здоровье не факт, лол.
>хачкель ничем не лучше крестов или джавы
По такой логике вообще все языки говно и нахуй вообще жить - через десяток лет устареем и станем легаси на свалке исторри.
Аноним 18/11/16 Птн 21:23:38  878026
>>878023
> вообще все языки говно
А ты понял суть
Аноним 18/11/16 Птн 22:04:30  878049
>>877689
Так и цифровые нейросети рецепторы воспринимают дискретно, проходя через АЦП. К слову, мицелий все-равно может чувствовать боль, в том смысле, что реагировать. То есть, восстанавливаться после некоторых разрушений, хоть и не как нервная сеть и не всегда. Впрочем, думаю, что добавить некоторые чувствительные конечности в цифровом виде было бы не слишком сложно. А затем модулировать и передавать по нитям. Впрочем, вряд-ли я сказал что-то нормальное. А мышечные, тут надо подумать. Судя по всему для мицелия нужны некоторые санитары, прочищать забитые пути, старые стереотипные... Нет, усложнение. Я пытаюсь достичь в этом плане некоя вибрация нитей, мозги кипят, путь на стороне листа понятен.
>Математическая модель роста гриба обеспечивает ему лишь равномерное распространение тела в гумусе, для лучшего поиска питательного вещества. Это мог бы быть и фрактал, если бы шанс нахождения питательных вещест был больше.
А разве нейроны в человеческом мозгу не есть на некой нейроглии, которая и питает ее? Взять вместо нейроглии некий гумус. Или это совсем бред, как и все остальное? Фракталы вроде бы даже и не есть каким-то противоречием, скорее всего http://studopedia.org/4-153326.html
Впрочем, думаю, что фрактал нужно представлять и мыслить фракталами уже уровне чуть выше за этот. Но не слишком и высоко, конечно. К примеру, как некая мозаика даже. То есть, если отдельно нейрон может распознавать символ, то кому это интересно? Но если сам по себе нейрон ничто, но собираясь в группы, но самостоятельно, а не жестко. Я уже писал о фрактальном сжатии изображений. Да сети Кохоненна, но все-же это не то, что требуется.

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

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

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


Я вообще не понимаю, что со мной делается. Мышление стало каким-то импульсивным и очень переносится на бессознательное. Я могу слушать незнакомый текст на не знакомом языке по незнакомой теме и включая у себя пластинку начинать его и ее понимать. Такая фоносемантика, теория очевидностей, как я уже говорил. Я думаю, что ИИ, как уже говорил, должен применять во многом бессознательное, как сознательное. То есть даже применять когнитивные искажения. Я довольно много манипулировал людьми и осознал, что во многом они даже сказанную мною мысль нечайно как-бы поза кадром будут воспринимать, как свою собственную. Не говоря уже об ожидаемости, но меня много иллюзии забавляют или мучают. Некая вешалка, сапог, одежда кажется сидящим человеком. Могу увидеть в скрепках и бумаге довольно детальную куклу. Еще постоянно эти оклики. Странные штуки. Боюсь сойти с ума, может я уже пишу бред, но врачи мне говорили, что я просто невротик. Не знаю зачем я это написал, может хотел высмеятся.


Аноним 18/11/16 Птн 22:06:36  878051
>>878049
Забыл дописать, что дабы сойти с ума нужен ум. Да и самоорганизация невозможна без энтропии. Тут сразу вспоминается химический катализ и его связь с информатикой, то есть такая научная работа была на Киберленинке. Довольно таки популярное решение где-то в 60-х годах, но теперь нет. Да и пролог уже не очень используют.
Аноним 18/11/16 Птн 22:14:55  878056
>>876466
Фу блядь. Reason - это такой тайпскрипт с очень хуёвым синтаксисом.
Аноним 18/11/16 Птн 22:15:49  878057
>>878056
Лол.
Аноним 18/11/16 Птн 22:18:29  878060
В детстве какие-то странные информационные потоки вливались в меня. Я даже активно видел Дом 2 на украинском. В мой код, я начинаю замечать, записано выражение мамы о том, что надо сделать ритуал, если ты сказал что-то вроде "черт побери". Дабы черти покинули хату. А еще Кин-дза-дза, я помню с детства лишь тот кадр, где ведут парня в желтых штанах, которого я воспринял за Иисуса. Я смотрел сериал Универ и шоу долгоносиков. Первый я смотрел под влиянием своей двоюродной сестры, я делал на телефоне нокия сайт из таких рамок, разных линий _. Сайт для универа, папиных дочек да разные там эти, мне наверное нравилась сама картинка происходящего. А телепузиков я всегда боялся. Черный бумер, скрытые сигналы детей, которые хотят попробовать коноплю, но не знают про опиодные рецепторы и не могут ее достать. И когда я перевелся, почему? Я сам странно вел... девочка повела меня за какие-то кирпичи и захотела поцеловаться. Это было в первом классе, я ничего не понимал. Меня спрашивали кем я буду, каким военным, сказали сказать моряком. Учительница сказала мне так ответить, а потом это распостраняли. Но я не хотел быть военным. На детских фотографиях я был безчувственным и излишне над людьми, но когда я был возле растений я чувствовал себя радостным. Но возле дома напротив дедушки и бабушки росли грибы, я считал их вредными и уничтожил. Я даже уничтожил мицелий. Они больше не росли. Я уничтожал грибы, что росли на деревьях вверху такие большие, я не знаю деревья, их названий. Но зачем откопали елочку возле моего дома мама и отдала ее посадить возле церкви? Ее никто не подливал и она засохла. Она верила, что быть слишком выше дома это плохо.
Аноним 18/11/16 Птн 22:19:10  878061
>>878056
Хуёво ты его родословную изучил особенно учитывая что напрямую в жс оно не компилится.
Аноним 18/11/16 Птн 22:51:05  878078
>>875637 (OP)
каму нахуя нужна ваще функцинальное прогрммирование)) когда есь ламповая джава)

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

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

мима джава царина
Аноним 19/11/16 Суб 00:03:02  878118
>>878023
> Да похуй
Ну блин, там кто-то выше по треду кричал аллилуйя, мол труфп ин да браузер - а на деле это какой-то ненужный кусок говна уровня детского конструктора.

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

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

> До этого было то же самое
Тхиз, я как раз об этом.

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

На самом деле все языки хороши, пока занимают ту нишу, для которой они предназначались.
Аноним 19/11/16 Суб 12:26:51  878242
>>878016
>переписывает компилятор языка из-за того, что у них сайт на этом языке тормозит
Ризон они пилят, потому что синтаксис им не нравится. То ли жабаскриптеры неосиливают писать -> вместо =>, то ли хрен его знает. Вот в этом случае лучше бы они действительно компилятор окамла переписали. Со всем тулингом. И библиотеками.
Аноним 19/11/16 Суб 13:35:46  878264
>>878242
> Ризон они пилят, потому что синтаксис им не нравится
Вообще не понимаю этой хуйни. В эмелях же самых хуёвый синтаксис эвар, что-то типа паскаля, только всерьёз. Вот бля, я и джаваскриптовый синтаксис люблю, и хаскельный, и скальный (пока не начинается scalaz), но эмельный это же очевидная говнина говнин, просто ёбаный уродливый мусор, как его можно любить за что-либо? Он хуёвый, с какой стороны ни посмотри, что для писания, что для читания.
Аноним 19/11/16 Суб 13:48:37  878267
>>878264
Если ты про смлный, то я с тобой согласен, хотя там всё не так плохо, как ты рисуешь. В окамле же всё заебись с синтаксисом. Разве что begin и end можно было заменить на фигурные скобочки, потому что писать лень, смотрится так себе, а обычные скобки хрен увидишь. Тут дело в том, что они в итоге сделали ещё хуже, чем было.
Аноним 19/11/16 Суб 14:25:04  878276
>>878267
Бля, я в глаза проебался. В ризоне заебись синтаксис, это в окамле говно.
Единственное что неоч - это лямбды:
js: let f = x => y => x + y
reason: let f = fun x => fun y => x + y
Аноним 19/11/16 Суб 14:53:41  878285
>>878276
можно убрать лишний fun
let add = fun a b => a + b;
Аноним 19/11/16 Суб 15:07:41  878294
Лямбда, тебе не надоело пропагандировать функциональщину?
Аноним 19/11/16 Суб 16:16:24  878321
>>878294
не))
Аноним 19/11/16 Суб 17:21:12  878339
>>878242
Ниасилили.

>>878264
В хаскеле мльный синтаксис как бы.
Аноним 19/11/16 Суб 18:04:20  878369
Вот нахуй хаскелл сделали с уебанским двумерным синтаксисом, идиотизм же.
Аноним 19/11/16 Суб 18:39:49  878392
Mirandalogo(pro[...].jpg (12Кб, 303x125)
>>878339
> В хаскеле мльный синтаксис как бы.
Лол, нет.
>>878369
Завидуй молча.
Аноним 19/11/16 Суб 18:42:54  878394
>>878392
https://en.wikipedia.org/wiki/Miranda_(programming_language)
>Influenced by ... ML ...
Аноним 19/11/16 Суб 18:47:36  878397
>>878392
Хачкиль все относят к мл-семейству. Просто там сахарком посыпали, и стало не так похоже.
Аноним 19/11/16 Суб 18:52:47  878401
>>878397
В эмелях нельзя сделать where, потому что порядок вычисления императивный.
Некоторые учоные это считали настолько важным что даже писали про это статьи в духе "The next 700 programming languages":
http://www.inf.ed.ac.uk/teaching/courses/epl/Landin66.pdf
Аноним 19/11/16 Суб 18:56:52  878404
>>878401
> порядок вычисления императивный.
думаю ты просто ошибся, но на всякий случай, энергичность вычислений != императивность
Аноним 19/11/16 Суб 19:01:57  878408
>>878401
>В эмелях нельзя сделать where
Да как нефиг делать. Просто трансформируй в let первым проходом по аст. А если так хочется ленивости (или будут проблемы с перекрёстными дефинишонами), то всегда можно обернуть в функцию.
Аноним 19/11/16 Суб 19:04:01  878410
>>878404
Здесь слово "императивный" лучше подходит. Суть в том, что стейтменты вычисляются друг за дружкой и биндинги - не исключения. Введение связывания/переменной - это стейтмент, который должен участвовать в этой императивной очереди выполнения строчек и должен предшествовать строчкам где это связывание будет использоваться. Эмели со своими let-ами здесь ничем не отличаются от сишек или джаваскриптов.
Аноним 19/11/16 Суб 19:07:05  878412
>>878408
Ты просто задумайся о схеме такого преобразования.
Например,
f x = if x > 10 then y else z
where
y = longComputation1
z = longComputation2
Будут ли леты перед if, или внутри then-else?
А это только самый банальный пример, даже без сайдэффектов.
Аноним 19/11/16 Суб 19:16:08  878417
>>878410
Куда-то не туда тебя несёт, по-моему. В том же хаскиле ты не можешь вычислить a + b не вычислив полностью всё, от чего зависят a и b. И вычисляться они будут ровно так же по очереди как и в мле.
>>878412
>Ты просто задумайся о схеме такого преобразования.
Задумался, всё нормально.
>Будут ли леты перед if, или внутри then-else?
А это не важно. Во-первых, можно объявить where синтаксическим сахаром для let, а там пусть сами ебутся. Во-вторых, можно во время компиляции обернуть их в лямбду без (ок, с одним) аргументов и получить ту же самую семантику. Преобразование тривиальное, даже пандорический захват не надо делать.
Аноним 19/11/16 Суб 19:18:24  878418
>>878410
Хаскельские let in и where это просто синтаксический сахар вместо подстановки значений в лямбду, это даже не биндинг.
Аноним 19/11/16 Суб 19:26:12  878421
>>878417
> можно во время компиляции обернуть их в лямбду без (ок, с одним) аргументов и получить ту же самую семантику.
Какую ту же самую, ты ебанутый?
Если ты обернёшь их в санки, не мемоизирующие результат, ты получишь call-by-name
если ты обернёшь их в санки, мемоизируищие результат, ты получишь call-by-need,
как в хаскеле, только неоптимизированный.
Вот так вот вводя "незначительный сахарок" ты незаметно сделал язык ленивым.
>>878418
Ты отвечаешь на пост в котором ничего не говорится про хаскельный let.
В эмелях другой let, в котором синтаксическая позиция и порядок вычислений неразрывно связаны.
Аноним 19/11/16 Суб 19:35:33  878428
>>878421
Я о том, что в хаскеле вообще нет биндинга, а если был бы, он бы работал так же само как и в мле, в котором он есть.
Аноним 19/11/16 Суб 19:46:00  878431
>>878428
В широком смысле под биндингом понимают просто синтаксическое введение имени, независимо от того, во что оно там скомпилируется и как будет работать.
Аноним 19/11/16 Суб 19:59:56  878439
>>878401
В эмелях можно сделать вхере.

Более того, это не имеет никакого отношения к тому факту, что у хаскеля мл-лайк синтаксис. Вообще никакой связи.
Аноним 19/11/16 Суб 20:02:04  878441
>>878431
Введение имени это определение лейбла указывающего на какие-то данные, а в хаскеле имя ни на что не указывает, это просто параметр выражения, оно не живёт само по себе, его нельзя отдельно определить.
Аноним 19/11/16 Суб 20:03:08  878444
>>878421
> Какую ту же самую, ты ебанутый?
> ты получишь call-by-need, как в хаскеле

Ну вы поняли, да.
Аноним 19/11/16 Суб 20:11:27  878450
>>878421
>ты незаметно сделал язык ленивым
Не язык, а одно выражение. И не сделал, а это всего лишь один из вариантов решения. Так-то в окамле есть lazy, он теперь ленивым языком становится что ли?
Аноним 19/11/16 Суб 20:48:21  878466
>>878439
> нету where, какие-то ёбаные галочки в типах, одномерный синтаксис
> есть where, двумерный, в синтаксисе нет вообще ничего похожего на эмельный
> мл-лайк
/0
>>878444
> where - сахарок
> ту же самую
> подразумевал не эмельную
/0
>>878441
Введение имени это лирика, а не физика, аутист.
>>878450
Ок, нормальное замечание.
Аноним 19/11/16 Суб 21:00:23  878474
>>878401
В том же пюрэ есть where. Ленивость, порядок вычислений — все это не имеет значения, когда речь идет о сахарке. Как сахарок нужен — тот и можно сделать через ppx.
Аноним 19/11/16 Суб 22:37:43  878540
>>878466
>Введение имени это лирика, а не физика, аутист.
Не можешь отличить параметр выражения от лейбла? Совершенно разная семантика же. Можешь ты в хаскиле ввести имя отдельно от лямбды куда оно тут же будет подставлено? Не можешь. Ну значит это нихуя не введение имени.
Аноним 19/11/16 Суб 22:38:59  878541
>>878466
Ладно, ты не знаком с историей создания хаскеля, не понимаешь, что тебе пишут и пытаешься толстить. По-моему все в треде это уже поняли, хватит это кормить.
Аноним 19/11/16 Суб 22:58:36  878551
>>878540
В хаскеле синтаксис из миранды, а в миранде синтаксис из ISWIM. Корни более ранние чем первые эмели.
Аноним 20/11/16 Вск 10:03:11  878688
>>875657
Штоэта блять?
Аноним 20/11/16 Вск 10:33:13  878696
>>877559
Это как?
Аноним 20/11/16 Вск 14:22:17  878794
Как называется подмножество зависимых типов, которое гарантировано не требует вычислений в рантайме?
Аноним 20/11/16 Вск 14:23:48  878795

>>878794
Зависимые типы, лол
Аноним 21/11/16 Пнд 01:51:24  879377
>>878051
>>878049
>>878060

Просто закинься кислым.
Аноним 21/11/16 Пнд 04:58:30  879396
>>878049
>>878060
это писал один и тот же анон? если так то чувствую родную душу :3 скажи, анон, чем ты занимаешься в частности в треде по фп? не хочешь вместе поупарывать?
Аноним 21/11/16 Пнд 11:24:48  879434
>>878794
>гарантировано не требует вычислений в рантайме
Хуй пойми, что ты тут имел в виду.
Вычисления во время компиляции? Отсутствие информации о типах в скомпилированной программе? Последнее называется type erasure, если что.
Аноним 21/11/16 Пнд 11:34:54  879438
>>877950
>зачем фейсбук пилит reason?
Хочет и пилит, в чем проблема? Он может это себе позволить.
>Я только-только освоился с пюрэхаскеллями, до меня наконец-то дошла прелесть контроля эффектов — но из-за появления reason я не знаю, куда прикладывать усилия.
ИМХО, ризон не дает ничего нового по сравнению ни с хаскелем, ни с пюрешкой, поэтому не нужен. Кроме того, сам по себе тезис "фейсбук разрабатывает ризон" совершенно не означает, что за этой командой стоит вся мощь фб. Это скорее инвестиции, как в случае с мозилловским растом. Выстрелит - окей, не выстрелит - тоже хуй с ним. А вот пюрешку клепают люди, у которых основной продукт на ней сделан. Причем в последнее время они зашевелились, фундепы добавили.
Хаскель тут вообще немного в стороне - GHCJS завезли, хуле надо кроме того что когда в последний раз я на него смотрел, он был он тормознутый, жрал память как не в себя, да и хуй соберешь. А еще в итоге тащишь весь рантайм в браузер. Как там, кстати, не пофиксили его производительность?
Аноним 21/11/16 Пнд 13:30:18  879470
>>879438
>Это скорее инвестиции, как в случае с мозилловским растом. Выстрелит - окей, не выстрелит - тоже хуй с ним.
Лол, нормальную ты так хуйню написал. Начиная с того что они его вполне целенаправленно разрабатывают, заканчивая тем что он привносит дохуя нового в байтопердолинг — по всем своим же пунктам обосрался.

А вообще, я не понимаю что вы так прицепились к этому ризону — это даже не язык, а интерфейс к окамлу, как его называют сами разработчики. Хотели потыкать окамл но не нравились begin..end и звёздочки вместо скобочек с запятыми — ну потыкайте ризон, больше он не для чего не пригоден.
Аноним 21/11/16 Пнд 14:40:15  879507
>>879470
>это даже не язык, а интерфейс к окамлу
Так это же чудесно. Вместо очередного нового языка, который хуй знает когда созреет, получаем все плюшки уже имеющегося старичка.
>что вы так прицепились к этому ризону
Ризон — это окамль с вебмакаковским человеческим лицом. Оксиген никому не был нужен. А реакт нужен всем. И хороший язык для реакта дает надежду на увеличение продуктивности работы.
Аноним 21/11/16 Пнд 14:52:25  879518
>>877783
Я бы не советовал использовать cake pattern, если ты совершенно четко не понимаешь какие плюсы и минусы он тебе даст по сравнению с конструкторами конкретно в твоём случае.
Аноним 21/11/16 Пнд 15:05:04  879524
>>879507
> Ризон — это окамль с человеческим лицом. Оксиген никому не был нужен. А реакт нужен всем. И хороший язык для реакта дает надежду на увеличение продуктивности работы.
Чёто я нихуя не улавливаю твоей логики. Реакт - жс фреймворк написанный на жс, причём тут окамл?
Аноним 21/11/16 Пнд 15:29:28  879536
>>879524
Ты не в курсе, что ризон нацелен именно на жс-макак, и одним из его плюсов числится легкость взаимодействия с жс и генерация жс-кода, похожего на написанный вручную?
Один из фейсбукокорейцев уже почти допилил типизированные биндинги ризона к реакту, в дискорде можешь все увидеть.
Аноним 21/11/16 Пнд 15:57:35  879557
>>879536
Бредятина какая-то. Скажи честно, ты видел тайпскрипт?
Он от этого вашего ризона отличается вещами уровня "x => x + x" vs "fun x => x + x", причём не в пользу ризона.
И для него тайпинги для всех сортов реактов и ридуксов уже давно написаны.
Аноним 21/11/16 Пнд 15:59:42  879559
>>879557
Ага, видел. И отсутствие non-nullable типов до второй версии видел. И отсутствие ADT вижу. И косяк с инвариантами вижу.
Тайпскрипт — это жаба, натянутая на ЖС, а не полноценная система типов. Флоу и тот лучше.
Аноним 21/11/16 Пнд 16:11:44  879564
>>879559
> отсутствие ADT
https://www.typescriptlang.org/docs/handbook/advanced-types.html
См раздел "discriminated unions".
А потом прочитай все разделы раньше и покажи в ризоне юнион типы и типы пересечения.
Аноним 21/11/16 Пнд 16:16:33  879570
>>879564
>А потом прочитай все разделы раньше и покажи в ризоне юнион типы и типы пересечения.
Ты хоть страничку ризона открывал? Или код на кемле хоть раз видел?
А вообще тот анон прав — тайпскрипт это какая-то ява с мл-ем.
Аноним 21/11/16 Пнд 16:21:44  879573
>>879564
>function isFish(pet: Fish | Bird): pet is Fish {
> return (<Fish>pet).swim !== undefined;
>}
АХ ТЫ Ж ЕБАНЫЙ ТЫ НАХУЙ.
ADT my ass.
Химера из жабы, утки и верблюда. Мутабельная химера. Недоделанная химера.
Не, лучше не посылай меня в документацию, а изучи ризон и/или окамль.
Аноним 21/11/16 Пнд 16:36:17  879587
>>879570
Ты же даже не знаешь, что такое типы объединения и типы пересечения.
Я не буду копипастить тебе код со ссылки, не можешь открыть - твои проблемы.
> изучи ризон и/или окамль.
Я дрочил на модулефункторы ещё когда твой папаша ебал свою правую вместо твоей мамы,
сейчас когда мне нужен параметризуемый модуль я просто пишу "module.exports = (param) => { ... }" и живу полноценной жизнью.
Аноним 21/11/16 Пнд 16:41:45  879595
>>879587
Быстро же ты со своей костыльной параши сманяврировал на модули.
Аноним 21/11/16 Пнд 16:50:51  879608
>>879595
Это не костыли, а остриё прогресса в мирке типизации. Я просто расширил круг претензий ещё и до модулей. Где-то там в 70х в языкострое было модно выдумывать синтетические абстракции и усиленно воевать с простотой и законами физики. Ни в коем случае нельзя реюзнуть обычные типы для модулей и делать параметризуемые модули обычными функциями, надо непременно придумать какие-нибудь сигнатуры, функторы, ебливую модель компиляции, чтоб пользователь языка не заскучал.
Аноним 21/11/16 Пнд 17:11:28  879623
>>879434
Ну, ты знаешь, что такое зависимые типы? Рантайм от компайлтайма отличаешь? В общем случае они требуют контроля типов в рантайме. Вот я и спрашиваю, как называется их подмножество, которое ничего не будет делать в рантайме.
Аноним 21/11/16 Пнд 17:15:57  879627
Единственное чем привлекает этот ризон - возможностью писать компактные нативные программки на языке менее блевотном, чем все остальные с аналогичными свойствами.
Аноним 21/11/16 Пнд 17:16:43  879628
>>879623
Ты не путаешь зависимые типы и контракты? Завтипы, как и прочие типы статически-типизированных ЯП, проверяются в компайлтайме.
Аноним 21/11/16 Пнд 17:17:24  879630
>>879627
Таки да, в этом суть любого языка.
Аноним 21/11/16 Пнд 17:23:29  879640
>>879623
> как называется их подмножество, которое ничего не будет делать в рантайме.
Гугли "proof irrelevance".
>>879628
> Завтипы, как и прочие типы статически-типизированных ЯП, проверяются в компайлтайме.
Проверяется структура с точностью до индукции всякой, сами значения в типах в рантайме нужны, причём иногда даже для логики. Например, это совершенно нормально для языка с завтипами, распечатать размер, который хранится на тайплевеле, для списка, длина и содержимое которого определяется в рантайме.
Аноним 21/11/16 Пнд 17:25:42  879641
>>879630
Нет, на джаве или сишарпе или питоне или жс нельзя писать компактные нативные программки.
Они все требуют рантайм, они все исполняются на VM. А ризон в этом плане как сишка или кресты:
делаешь маленькие скоростные екзешники которым ничо не надо.
Аноним 21/11/16 Пнд 17:30:41  879646
>>879640
Спасибо, гуглю.
Аноним 23/11/16 Срд 04:10:23  880665
51873165p0.png (300Кб, 521x704)
Посоны, можно как-нибудь дать синоним дата-конструктору?
data Some = Foo String | One
И нужно что-то вроде
Synonim :: String -> Some
Synonim str = Foo str
Аноним 23/11/16 Срд 04:14:32  880666
hellsingcatboyb[...].jpg (53Кб, 400x590)
>>880665
И если что, я знаю что можно определить функцию
synonim :: String -> Some
Но мне нужно с аппер кейса прост.
Аноним 23/11/16 Срд 05:35:32  880676
Сап функциональщики
Подскажите пожалуйста что обмазать чтобы понять зависимые типы. type-driven development with idris кто-нибудь читал? Стоит ее покупать?
Я знаю эрланг, кложу и хаскел и хочу понять в чем прикол зависимых типов, посмотрел пару видосов на ютубе про идрис от создателя идриса, выглядит круто. Но чувак просто показал как он делает что-то на идрисе, выглядит как черная магия. Может есть хорошие пейперы или книги где это все описано?
Аноним 23/11/16 Срд 05:35:51  880677
>>880665
>>880666
{-# LANGUAGE CPP #-}
#define Synonim (Foo "Yoba")
Аноним 23/11/16 Срд 08:42:42  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/ но там сложна, требуется уже какое-никакое понимание что вообще происходит.
Аноним 23/11/16 Срд 09:18:11  880703
>>880676
>type-driven development with idris кто-нибудь читал?
Она ещё не вышла.
на сайте издателя значится как early access
автор ещё не дописал её, значит
но первые главы прочитать уже можно, если предзаказать печатную версию на сайте
Аноним 23/11/16 Срд 10:52:19  880728
>>880703
Вроде как читал что все чептеры готовы.

>>880691
Добра тебе!
Аноним 23/11/16 Срд 14:08:53  880815
Хаскеляне, у меня допустим тип данных с большим количеством полей, а логику надо реализовать в зависимости от значения только одного из этих полей. Как в этом случае добраться до его значения без дикого патерн матчинга в виде
func _ _ _ _ myfield _ _ _
Аноним 23/11/16 Срд 14:16:04  880823
>>880815
юзать рекорды и линзы
Аноним 23/11/16 Срд 14:38:08  880833
>>880665
Расскажешь, зачем тебе это? Синоним типу ты можешь определить, а конструкторы переименовывать... Что-то странное.
Аноним 23/11/16 Срд 14:38:48  880834
>>880691
Съеби отсюдова.
Аноним 23/11/16 Срд 14:40:59  880835
>>880834
ДЯдя, ты ахуел? Лижи мою залупку, шлюха.
Аноним 23/11/16 Срд 14:43:08  880836
>>880835
Да ладно, не обижайся, я ж любя. Не дай бох засрешь и тут весь тред своими хаматопиями блждад ну нахуй
Аноним 23/11/16 Срд 14:45:53  880839
>>880665
>>880666
Почитай про PatternSynonyms. С ними можно сделать это как минимум для паттерн матчинга:
pattern Yoba :: Some
pattern Yoba <- Foo "Yoba"
Но будет ли работать Yoba в обычном контексте вне матчинга - я хз, хаскеля под рукой нету, сам проверяй.
Аноним 23/11/16 Срд 14:48:09  880843
>>880836
Так зависимые типы это обязательно жосткая абстрактная теоретическая наркомания, приземлённого ремесленнического там в принципе быть не может, потому что нужно оно для супер-пупер формально-даказанных прошивок ядерных ракет.
Аноним 23/11/16 Срд 14:50:49  880844
>>880843
Да я не про это, лол, ладно.

Ну и в скалке жи есь зависимые типы, так что никаких ракет, Е ФОР ЕНТЕРПРАЙС
Аноним 23/11/16 Срд 14:53:49  880848
>>880844
Подмножество зависимых типов, которые есть в скалке, эмелях и тайпскрипте - это обычно не то, что имеют в виду, когда просят накидать литературы по зависимым типам.
Аноним 23/11/16 Срд 14:54:35  880849
>>880848
> в скалке, эмелях и тайпскрипте
Ах да, забыл ещё C++ и D.
Аноним 23/11/16 Срд 14:56:27  880851
>>880848
Ну ладно, идрис себч позиционирует как "прикладной" язык, так что все равно необязательно ракеты. Алсо, что ты имел в виду под зависимыми типами в мл? В депендент мл или в мл?
Аноним 23/11/16 Срд 15:43:42  880870
>>880851
"Прикладной" язык Идрис - это как раз для ядерных ракет. А когда завтипочек говорит "неприкладной",
он вообще имеет в виду использование для конструктивного доказательства математических теорем, а не для софта.
Аноним 23/11/16 Срд 15:45:10  880872
>>880833
Прост хотел чтобы у конструкторов и прочего были как нормальные имена, так и односимвольные из блока юникода Mathematical Alphanumeric Symbols
Короч обычный
Больше айдишники меняю и отступы выравниваю чем код пишу.
Аноним 23/11/16 Срд 15:46:19  880875
>>880851
> что ты имел в виду под зависимыми типами в мл? В депендент мл или в мл?
То же что и в скале имеют в виду под зависимыми типами - path dependent types.
Они есть хоть в смл, хоть в окамл.
А в депендент мл что-то куда более существенное, ближе к агдам.
Аноним 23/11/16 Срд 15:48:07  880878
Снимок.JPG (24Кб, 707x239)
>>880872
>Короч обычный
Тут должен был быть Аутизм во макаба не смогла.
Аноним 23/11/16 Срд 16:45:34  880914
>>880872
Лол, как я тебя понимаю, бро. Как что-то плохое, кстати. Кто-то и пробелы должен расставлять!
Аноним 24/11/16 Чтв 20:23:51  881629
iscribbleuhbymo[...].jpg (36Кб, 400x366)
Посоны, есть какая-нибудь простая GUI-библиотека для Хаскелля под винду? Для тех кто ТОЛЬКО УЧИТЬСЯ.
Мне прост юникодный текст нужно выводить, а у терминала с этим проблемы. Ну ещё хотелось бы пару блоков с выводом текста, пару кнопочек и одну стороку для инпута.
Аноним 24/11/16 Чтв 21:51:33  881670
memspacer-ui[1].png (49Кб, 509x378)
>>881629
Gtk + Glade, лови пример: https://github.com/apsk/memspacer-ui
Заодно сразу и template haskell макрос для подвязки к контролам по именам.
Аноним 25/11/16 Птн 02:27:13  881770
1293381399188.jpg (44Кб, 451x440)
Ну ёбанный ж ты нахуй.
Сам хачкель внутри себя держит чары в юникоде, но чтобы записать их в файл - нужно пердолиться.
Аноним 25/11/16 Птн 03:09:54  881771
>>881770
Ты видишь мои посты? >>881670 >>880839

Аноним 25/11/16 Птн 07:35:39  881795
>>881670
андрюша)
Аноним 25/11/16 Птн 08:22:29  881810
1306003891549.jpg (51Кб, 572x546)
Снимок.JPG (47Кб, 785x424)
>>881771
Я с кодировкой IO не мог разобраться, какой мне Gtk?
Алсо, как паттерн-мячинг и фолды/мапы с конструкторами использовать? Пикрелейтед.
Аноним 25/11/16 Птн 16:26:37  881983
>>881810
Что за цветовая тема. Очень надо, брат умирает от default theme/
Аноним 25/11/16 Птн 19:19:31  882083
>>881983
так дефолтная же, One Dark, мимокрок
Аноним 25/11/16 Птн 19:29:06  882095
>>882083
Но не в джетбрэйновких продуктах.
Спасибо.
Аноним 25/11/16 Птн 20:24:40  882135
Untitled.png (17Кб, 638x327)
Untitled1.png (17Кб, 635x328)
>>882095
Так с самого начала было ясно что это атом, лел
Палю годноту для идейки - https://github.com/ChrisRM/material-theme-jetbrains
Аноним 25/11/16 Птн 21:16:33  882151
2bcbe14ae2efadf[...].png (33Кб, 417x326)
3a50cdabf2ff372[...].png (25Кб, 409x212)
SPJ со своим другом наконец-то разработали недостающую теорию,
открывающую мир нешаблонного параметрического полиморфизма байтоёбским типам со стека:
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/11/levity-1.pdf
Аноним 25/11/16 Птн 23:13:43  882218
haskell1.png (66Кб, 1425x714)
>>875637 (OP)
Э, ОП, вот такая книженция на инглише есть. Надо?
>>882135
А в идее или атоме билдинг настроить можно?
Аноним 26/11/16 Суб 01:19:35  882268

>>882218
>А в идее или атоме билдинг настроить можно?
Что ты под этим подразумеваешь? Собирать по кнопочке/клавише со своими скриптами? Да.
Аноним 26/11/16 Суб 15:16:03  882479
Начал вкатываться в хаскелл и застопорился на первой же задачке. Хочу для тренировки реализовать ориентированный граф и пару алгоритмов на нем, которые сейчас разрабатываю по работе на скале.

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

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

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

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

Пока единственное что приходит в голову - хранить не ссылки на Node в ребрах, а какой-то индекс, а в самом графе хранить мапу из индекса в ноду. Но блядь, какого хуя? Лишнее преобразование, плюс потенциальное место для ошибок несуществующими индексами.
Аноним 26/11/16 Суб 15:41:12  882491
Кто-нибудь на fpconf собирается?
Аноним 26/11/16 Суб 15:44:51  882494
>>876258
>У тебя есть гарантии, что хотя бы один фп язык станет мейнстримным?
Скала с тайплевел стеком чем тебе не мейнстримный функциональный язык?
Аноним 26/11/16 Суб 15:58:34  882503
>>882491
Я.
Аноним 26/11/16 Суб 16:34:38  882518
>>882494
Тем что он сдох они переименовались и переключились главным образом на жаву, перестав даже спонсировать саму скалу?
Аноним 26/11/16 Суб 16:35:51  882519
>>882503
Головка от хуя.
>>882491
Щас бы о таком на ананасовой борде спрашивать. Еще вкшечку с авторизованным паспортом попроси сразу прикреплять к ответам.
Аноним 26/11/16 Суб 17:04:39  882536
>>882479
Да, по индексам. Нет, лучше нельзя. Страдай Наслаждайся функциональным программированием.
Аноним 26/11/16 Суб 20:33:34  882647
>>882479
Почему тебе нужно именно такое представление? Задавай граф матрицей инцидентности, например.
>>882518
Кто вам это в уши насрал? LIghtbend всю свою инфраструктуру строят на скале, просто начали уделять больше внимания джавистам. Хотя и раньше в джаве использовали play и акку.
Аноним 26/11/16 Суб 22:33:07  882732
>>882647
>Задавай граф матрицей инцидентности, например.
У меня очень большие графы (миллионы узлов), притом довольно разряженные. Матрица при этом дохуя лишней памяти, она годится только для небольших плотных графов. Так что только списки ребер, только хардкор.

>>882536
Мда. Ну и нахуй ваш этот хачкель нужен, если я рпостейшую задачу из теории графов без ебли на нем решить не могу?

Аноним 26/11/16 Суб 22:48:17  882740
>>882732
Он для развлечения нужен, лол.
Хочешь писать что-то кроме кластера метапарадигм и дрочива на типах — возьми что-то попрактичнее. Окамл, скала там. цл если ты скобкофил
Аноним 26/11/16 Суб 22:59:19  882745
>>882740
> возьми что-то попрактичнее.
> Окамл, скала там. цл если ты скобкофил
Из огня да в полымя. На окамле вообще писать нереально даже чисто из-за его синтаксиса, не говоря уже о мёртвой экосистеме, тулчейне который на винде настроить так же сложно как хаскель 10 лет назад. ЦЛ невменозный язык гениальных решений типа сadaddr и mapc. Scala - Java для шизофреников.
Аноним 26/11/16 Суб 23:08:29  882751
>>882745
Хз что там у окамла с экосистемой, иде нет как и на том же хаскелле — онли редакторы с утилитками автокомплита. С синтаксисом у него всё как раз таки заебись в хаскеле повырвиглазистей, хоть и компактнее, если ты сидишь на венде — ок, отпадает.
Цл предложил "просто так", ради разнообразия лол.
А вот что не так со скалой, при том что ты сам на яве пишешь — мне в голову совсем не приходит.
Аноним 26/11/16 Суб 23:10:24  882752
>>882732
Хаскель ленивый, может это поможет циклические зависимости сделать. Нужно погуглить, я в хаскеле не силен.
Аноним 27/11/16 Вск 00:19:28  882788
>>882740
Скалу я и так использую по работе. Понравилась функциональщина но раздражает слегка ее (скалы) переусложненность, в итоге решил попробовать вкатиться в чистый функциональный язык.

>>882751
Это не я отвечал. Я как раз сейчас перекатываюсь из джавы в скалу (пару проектов уже на ней сделал небольших), ну вот решил заодно хаскелль глянуть.
Аноним 27/11/16 Вск 00:20:06  882790
>>882752
Я уже погуглил, везде предлагают или какой-то грязный трюк использовать, либо делать как я сказал - через промежуточную индексацию узлов.
Аноним 27/11/16 Вск 00:45:16  882803
>>882790
>грязный трюк
Ты про это: https://wiki.haskell.org/Tying_the_Knot ?
Ничего грязного в нем нет, это просто использование особенности языка. Через ленивость еще и мемоизация делается: http://stackoverflow.com/questions/3208258/memoization-in-haskell
Я иногда хочу поглубже изучить хаскель именно из-за ленивости: на скале, например, я могу писать чисто функционально, это вопрос дисциплины, а вот модель вычислений поменять нельзя.
Аноним 27/11/16 Вск 01:14:10  882818
Функциональная парадигма норм в Kotlin реализована?
Аноним 27/11/16 Вск 01:35:17  882844
>>882818
Kotlin конечно мультипарадигменный язык, но все прагматичный и по этому больше ООП.

Для любителей функциональщины есть сторонняя библиотека
https://github.com/MarioAriasC/funKTionale
Аноним 27/11/16 Вск 01:35:46  882845
>>882803
>из-за ленивости
Поясните, какой в ней практический профит? То есть да, в каждой статье про хаскелль будет обязательно написано про охуительные оптимизации, связанные с чистотой функций вообще и ленивостью в частности, в итоге из текста создается впечателение что ленивость охуенно позволяет выигрывать в производительности. Но при этом по результатам бенчмарков и тестов хаскелль нихуя не впереди планеты всей, по производительности он в целом уступает С++ и держится где-то на уровне джавы.

Ну и смысл в этом всем тогда?
Аноним 27/11/16 Вск 01:46:50  882857
>>876182
>фп
>начать писать более лучший код
проиграл с этого аутиста.

обычно фп-лажей увлекаются лишнехромосомные "интеллектуалы", не осилившие ооп-дизайн, которых заебали собственные же полупроцедурные высеры.
Аноним 27/11/16 Вск 02:04:31  882875
>>882845
Не знаю где это ты видел что ленивость = оптимизация (и как вообще ты связал это с чистотой), это чаще всего абсолютно наоборот например выделить большой кусок памяти под весь массив разом будет куда быстрее чем делать это при обращении к каждому последующему элементу.

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

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

>Ну и смысл в этом всем тогда?
развлечение, считай это тестовым обкаточным полигоном для новых(зачастую старых) крутых концепций, которые рано или поздно окажутся во всех языках в той или иной мере, просто сейчас для них рановато — так же как симула в своё время, или Джобс со своими рассказами 2007-го года "как всё окажется в браузере".
Аноним 27/11/16 Вск 02:38:49  882910
>>875637 (OP)
>Types and Programming Languages
Эта книга не про практическое программирование, это по сути CS/математика с кивками в сторону имплементации компиляторов. Она точно нужна в этом списке?
Аноним 27/11/16 Вск 02:40:04  882911
>>875952
Видимо, что пробелы криво стоят в ОП.
другой-анон
Аноним 27/11/16 Вск 02:40:56  882912
>>882875
> (и как вообще ты связал это с чистотой)
чистота как раз таки сильно влияет на ленивость. Именно благодаря чистоте хаскель знает, что при одном и том же аргументе будет то же самое значение, фаза луны и время никак не могут повлиять, а значит выполнение можно отложить
Аноним 27/11/16 Вск 02:41:20  882914
>>875637 (OP)
Алсо бахни про Эрланг тогда уже или без типов не халяльно?
Аноним 27/11/16 Вск 02:45:52  882918
>>882912
>>882914
двачую, наряду с кложей второй фп-язык (хоть честно говоря эти потоки как-то не очень вписываются в концепцию "чистые функции"), который используется в реальном мире (особенно эликсир сейчас потиху заменят руби)
Аноним 27/11/16 Вск 02:51:44  882921
>>882845
Ленивость == композиция. Можно писать простой код и он будет хорошо компонироваться с другим таким же кодом. грубо говоря
Аноним 27/11/16 Вск 04:56:39  882940
>>882845
Сделать ленивое энергичным можно довольно легко, поставив какую-нибудь языковую йобу. Но вот наоборот в энергичном языке уже сложно - нужно писать специальные ленивые версии всего, и как-то еще заморачиваться.
Аноним 27/11/16 Вск 13:03:03  883007
>>882940
>Сделать ленивое энергичным можно довольно легко
Вообще-то, нет. "Поставив йобу" означает, что кто-то за тебя уже всё написал. А так тебе точно так же придётся переписывать всю библиотеку, которая была заточена под ленивость, и при энергичных вычислениях может просто зациклиться на самой невинной на первый взгляд функции. Да и если твой язык изначально ленивый, то энергичным его можно сделать, наверное, лишь поправив компилятор/интерпретатор, в энергичном же можно просто всё обернуть в функции (будет выглядеть как говно, но мы сейчас не об этом).
Аноним 27/11/16 Вск 13:12:09  883016
>>882518
>Тем что он сдох они переименовались и переключились
Я не про тайпсейф, а про тайплевел: cats, shapeless, вот это вот все. Тут тебе и уже почти стандартная библиотека тайпклассов, и чисто функциональные структуры данных, и продукты с копродуктами.
Аноним 27/11/16 Вск 13:15:48  883017
>>883016
>копропродуктами
пофиксил*
Аноним 27/11/16 Вск 13:16:55  883018
>>882910
>Она точно нужна в этом списке?
Да. То что сегодня подразумевают под "функциональным программированием" - это во многом именно "программирование на уровне типов".
Аноним 27/11/16 Вск 13:39:14  883023
>>882479
Рекуррентные и циклические определения? Думаю - коиндукцией, если такое есть в хаскеле.
Аноним 27/11/16 Вск 13:45:32  883024
>>882921
Подробнее: https://hackhands.com/modular-code-lazy-evaluation-haskell/
>>882845
Кроме модульности, еще можно делать цикличестие зависимости и мемоизацию в чистом языке. Выше в ссылки были. А о производительности по сравнению с другими языками особено никто не говорит: в них тоже можно использовать ленивые вычисления, чтобы не считать лишнего.
Аноним 27/11/16 Вск 14:59:54  883053
>>883018
Это лично тобой так воспринимается. Лямбда исчисление это функциональный язык и там типов нету. Я изучал долгие месяцы хаскел и зависимые типы, пытался присесть со штангой и сейчас решил что типизация и чистота мешают мне писать нормальный понятный код. На хаскеле что не пиши получается борьба с тайпчекером и какая-то ультразащитная хуйня. В общем если к коду нету офигенских требований по надежности я считаю сложную типизация оверинженерингом и через чур защитным стилем написания кода.
Аноним 27/11/16 Вск 15:30:16  883080
>>883018
Там теоретическая книга, как она поможет программисту ? TaPL смысла новичку читать 0.
Аноним 27/11/16 Вск 15:32:56  883083
>>883018
В итоге в списке 2 книги про то как начать программировать прикольно с нуля и неведомая теоретическая йоба с миллионом математических теорем в качестве упражнений.
Аноним 27/11/16 Вск 18:44:20  883169
>>882151
Спасибо, почитаю.
Аноним 27/11/16 Вск 18:49:00  883175
>>882914
Про эрланг просто есть уже тред. Надо ссылки бы поставить, да перекаты ведь, ссылки сдохнут.
Аноним 27/11/16 Вск 18:51:15  883178
>>883080
Интро ту фп тоже теоретическая. В прошлом треде вкидывали более полный список книг, просто оп не все (пока) добавил и не в том порядке.
Аноним 28/11/16 Пнд 01:42:53  883415
>>882479
Не знаю, как правильно решать такую задачу, самого напрягает невозможность нормально задать циклические связи, но все чаще меня посещает мысль, что явных циклических связей даже в мутабельном коде быть не должно.
Если данных мало, то можно их описать как угодно, заботиться об эффективности и компактности незачем. Если данных действительно много или они используются в вебгуйне, то приходится думать о сетевом взаимодействии, где циклических ссылок нет(хмл-параша не в счет). Выходит, что в любом случае уместно городить типы, подобные реляционным отношениям в БД, а не обычные объекты.
Аноним 28/11/16 Пнд 04:19:22  883454
Приведите хоть один пример реальной задачи, где без циклов не обойтись и\или они сделают код в стопицотраз практичнее и элегантнее. Вот и мне ничего в голову не приходит.
Аноним 28/11/16 Пнд 12:04:04  883542
>>882479
Попробуй навернуть индуктивных графов поверх ST или чего-то в этом роде.
Аноним 28/11/16 Пнд 12:08:02  883544
>>883454
>хоть один пример реальной задачи, где без циклов не обойтись
Расчет произвольного физического говна с пачкой вложенных циклов
мимо
Аноним 28/11/16 Пнд 13:54:49  883593
>>883454
Обход/заполнение массива/коллекции .
Аноним 28/11/16 Пнд 14:00:21  883596
>>883593
map fold unfold
Аноним 28/11/16 Пнд 14:08:28  883598
>>883596
медленно и ест память
Аноним 28/11/16 Пнд 14:21:46  883601
>>883598
Правда? В русте вообще все с этим ок, foldl' в хаскеле тоже вроде не сильно плох. Что не так, серьезно?
Аноним 28/11/16 Пнд 14:35:46  883608
>>883601
>В русте вообще все с этим ок
Может потому что он вместо фолдов просто инлайнит обыкновенный цикл? Ты глянь имплементацию-то.

Да и опять же: вложенность. Они хороши когда нужно что-то быстро перебрать за проход.
Посмотри на benchmarksgame rust vs c и haskell vs ocaml - там где первые разгромно сливают на пустом месте всё внезапно забито мапами и фолдами.
Аноним 28/11/16 Пнд 14:36:05  883609
Сага
Аноним 28/11/16 Пнд 14:48:19  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




Аноним 28/11/16 Пнд 15:17:30  883627
>>883616
>Тем более все равно используются циклы
Всё равно всё компилируется в машкод for simplicity умолчим про байткод, так давайте писать на голом машкоде.
Аноним 28/11/16 Пнд 15:20:46  883628
>>883627
А давайте плодить бесполезные временные объекты и загружать страницы по 5 секунд.
Аноним 28/11/16 Пнд 15:31:00  883632
>>883628
Да, в 13 лет я тоже хотел переписать Веб на ассемблере.
Аноним 28/11/16 Пнд 16:15:59  883650
>>883053
>Лямбда исчисление это функциональный язык и там типов нету
А как же типизированное лямбда-исчисление, м-м-м?
Аноним 28/11/16 Пнд 16:32:31  883658
Простое доказательство отсоса функциональных дебилов:
Map:
array_map( function($person) { return $person['name']; }, $some_array);
Foreach:
let r=[];for (let p of a) r.push(p.name);
Практически в 2 раза меньше кода, и гораздо читабельней.
Аноним 28/11/16 Пнд 16:35:04  883661
>>883658
И что это за довнский язык?
Аноним 28/11/16 Пнд 16:35:19  883662
Специальная олимпиада пхп-инвалидов ИТТ.
Аноним 28/11/16 Пнд 16:36:36  883664
>>883658
Зачем так длинно?
Аноним 28/11/16 Пнд 17:00:33  883683
>>883650
>>Лямбда исчисление это функциональный язык и там типов нету
>А как же типизированное лямбда-исчисление, м-м-м?
это надстройка, хочешь типов? Пожалуйста, но в своем сообщении я сделал акцент на то, что основа функционального программирования не требует типов. Можно быть функциональным, чистым и имьютабельным не сражаясь с тайпчекером. Тайпчекер не обязателен.
Аноним 28/11/16 Пнд 17:07:40  883689
>>883658
Ты дебил? Просто иди нахуй отсюда в свою пхп парашу. Фолд это оператор высшего порядка которые позволяют делать сложные преобразования данных в декларативном стиле, фолд изящно параллелится и математически прекрасен. Если ты не знаешь нахуя тебя хотя бы операторы высшего порядка (Даже джава долбоебы уже догадались, прикинь?) то что ты делаешь в этом треде?
Аноним 28/11/16 Пнд 17:08:24  883691
>>883689
> фолд изящно параллелится
В теории.
Аноним 28/11/16 Пнд 17:09:47  883693
>>883689
> фолд изящно параллелится
Т.е. нет, он даже в теории не параллелится.
Аноним 28/11/16 Пнд 17:12:46  883695
>>883689
>фолд изящно параллелится
Короче, ты обосрался. Вот.
Аноним 28/11/16 Пнд 17:12:47  883696
>>883691
В какой теории? Ты лурка начитался? ДАЖЕ ДЖАВА слесари это делают на своем хедупе, а в функциональном языке ты просто спавнишь еще один поток потому что данные не зависят друг от друга, в эрланге реализация распределенного мап-редьюса занимает до 50 строк, зависит от раскидистости почерка. Хаскелистам даже делать нихуя не надо вроде, он будет фолдить асинхронно даже не явно для программиста.
Аноним 28/11/16 Пнд 17:14:47  883697
ой блять я проебался, фолд не параллелица, рили, я про мап имел в виду. Обосрамс случился
Аноним 28/11/16 Пнд 17:15:43  883699
Но можем считать что мап это подмножество фолда где в фолд функции нету зависимости от аккамулятора
Аноним 28/11/16 Пнд 17:15:59  883700
>>883696
>данные не зависят друг от друга
Только вот в случае фолда они зависят.
> Хаскелистам даже делать нихуя не надо вроде
> вроде
Все твои "знания" — это набор слухов.
Аноним 28/11/16 Пнд 17:28:13  883710
>>883700
Как ты паралеллишь вычисления в хаскеле, лиспе. Пролей свет пожалуйста.
Аноним 28/11/16 Пнд 17:31:24  883712
>>883710
>Как ты паралеллишь вычисления в хаскеле
https://hackage.haskell.org/package/parallel/docs/Control-Parallel.html
Аноним 28/11/16 Пнд 17:36:32  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

Ты писал параллельный код на хаскеле?
Аноним 28/11/16 Пнд 17:38:13  883715
>>883713
>Ты писал параллельный код на хаскеле?
Нет. Но необязательно писать параллельный код, чтоб знать, что хаскель ничего "автоматически" не делает и Amdahl's law с причинностью нарушать не позволяет.
Аноним 28/11/16 Пнд 17:39:30  883716
>>883715
Ну это хорошо что ты знаешь конечно. Спасибо
Аноним 28/11/16 Пнд 17:57:11  883722
>>883544
>>883593
Наркоманы, имелись в виду циклические ссылки, а не фор\уайл-луп, лол.
Аноним 28/11/16 Пнд 17:59:45  883724
>>883658
Foreach:
let r=[];for (let p of a) r.push(p.name);
Map:
a.map(p => p.name)
Аноним 28/11/16 Пнд 18:00:02  883725
>>883693
>>883697
Ну вообще-то параллелится, нужно только только чтобы функция, по которой идет фолд, была коммутативной.
Аноним 28/11/16 Пнд 18:01:25  883726
>>883725
>коммутативной
А может всё-таки ассоциативной?
Аноним 28/11/16 Пнд 18:01:51  883727
>>883724
Кстати, на каком языке аналогичный код будет короче всего?

(map :name a)
Аноним 28/11/16 Пнд 18:03:36  883728
>>883726
Ассоциативной тоже, да.
Аноним 28/11/16 Пнд 18:03:37  883729
>>883727
>эти скобки
На пюрэ на один символ больше (_. вместо :), но на два меньше.
Аноним 28/11/16 Пнд 18:05:06  883730
>>883725
Ну и это довольно сильные ограничения на функцию, которую можно сунуть в fold.
Надо, во-первых, ограничить тип операции с a -> b -> b до a -> a -> a

>>883728
>Ассоциативной тоже
Что значит "тоже"? Ассоциативности достаточно, коммутативность не нужна.
Аноним 28/11/16 Пнд 18:05:30  883731
>>883729
А на каком-нибудь факторе, кстати, можно убрать явное упоминание аргумента, так что будет еще короче, наверное.
Аноним 28/11/16 Пнд 18:06:50  883732
>>883730
> ограничить тип операции
Ну так это фактически и есть требование коммутативности, не?
Аноним 28/11/16 Пнд 18:08:14  883734
>>883732
Естественно, для коммутативности нужно a -> a -> a, но из a -> a -> a не вытекает коммутативность.
Аноним 28/11/16 Пнд 18:13:52  883739
>>883734
Верно.

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

Если нет коммутативности, то будут локи и не полная параллельность.
Аноним 28/11/16 Пнд 18:17:50  883741
>>883739
А, ну если ты хочешь в порядке получения, то тогда да, коммутативность нужна.

>Ассоциативность нам дает только отсутствие разницы между левой и правой сверткой
Даёт возможность параллелить вообще. Т.к. позволяет считать
(x `f` (y `f` (z `f` (.....)))
Как
(x `f` y) `f` (z `f` w) `f` ....
Аноним 28/11/16 Пнд 18:20:25  883744
>>883739
>Ассоциативность нам дает только отсутствие разницы между левой и правой сверткой
Для этого как раз коммутативность нужна.
Аноним 28/11/16 Пнд 18:24:30  883747
>>883741
Я это и имел в виду, да. Короче, мы просто под "параллельностью" подразумевали разные вещи: я - полную, а ты - хоть какую-то\практическую. Вот.

>>883744
Разве? Левая свертка - это ((a.b).c), а правая - (a.(b.c)). Или наоборот, вечно путаю, лол. Порядок аргументов тот же, порядок вычисления только другой.
Аноним 28/11/16 Пнд 18:26:30  883748
>>883747
>Порядок аргументов тот же
При левой свёртке начальный элемент слева от `f`, а при правой — справа.
Аноним 28/11/16 Пнд 18:26:32  883749
Но ведь все это по итогу сведется к тому что какие-то части параллелятся из-за отсутствия зависимости к следующим вычислениям а какие-то не параллелятся. Можно просто разделить эти задачи между потоками мапперами и потоками редьюсерами как это делают в эрланге например.
Коммутативные функции про которые вы говорите выше ведь всеравно должны на каком-то этапе свернуться в 1 аккамулятор ведь. Правильно? Просто если операция коммутативна то можно ее сделать параллельно, но прицепить к результату свертки ее всеравно надо будет, или я что-то упускаю?
Аноним 28/11/16 Пнд 18:28:14  883750
>>883749
Короче, мне тут пытаются доказать, что fold параллелится. Только почему-то рассказывают про map-reduce.
Аноним 28/11/16 Пнд 18:31:54  883756
>>883750
Хер знает, для меня картина мира такая - мап можно распределить на хуилион потоков и потом свернуть результаты. Первая часть параллелится как нефиг, вторая под вопросом, свертка же тоже может быть простая например просто добавлять результат в set, что является ассоциативной и коммутативной операцией, тогда можно редьюсеров захуярить большое количество и это будет очень близко к тру параллельности. Но все должно будет сойтись когда-нибудь в 1 точку из-за чего эта параллельность не совсем чистая. Опровергните если я не правильно понял
Аноним 28/11/16 Пнд 18:38:32  883759
>>883748
И что? Это же разные (в общем случае) элементы. Давай еще раз: левая свертка от правой отличается расстановкой скобок, но не порядком аргументов. Мы не делаем (c.b).a, мы делаем a.(b.c) - ок? Из ассоциативности для трех элементов прямо вытекает ассоциативность для эн элементов, а левый фолд от правого только ассоциотивностью и отличается.
Аноним 28/11/16 Пнд 18:43:29  883761
>>883756
Ну ясное дело, что в итоге все сойдется в одну точку, но под параллельностью же мы понимаем разделение задачи на потоки там, где это возможно, да? То есть 2+2 - это частный случай параллельного вычисления: тут всего одна операция, так что ясное дело, что она выполняется атомарно (параллелить ее не с чем, она одна всего), но это как бы такой аналог базового кейса в рекурсивном определении. Короче, параллельность - это не значит, что мы в каждый момент времени нагружаем эн потоков, параллельность - это когда мы всю имеющуюся работу (относительно) равномерно распределяем по всем имеющимся потокам.

>>883750
Ну, мап - частный случай фолда, еали уж на то пошло, но я про мап-редьюс не рассказываю, если это ты на меня намекал.
Аноним 28/11/16 Пнд 18:43:58  883762
has.png (14Кб, 525x168)
>>883756
>сойтись когда-нибудь в 1 точку из-за чего эта параллельность не совсем чистая.
Что сие значит, "параллельность не совсем чистая"? А какая?
Аноним 28/11/16 Пнд 18:52:22  883769
>>883762
Почему ты не назвал функцию-аргумент эф?
Аноним 28/11/16 Пнд 18:54:53  883771
>>883762
> mappend
Аноним 28/11/16 Пнд 18:59:08  883774
semilattice.png (71Кб, 640x480)
>>883762
ну хуй знает дебильный термин применил.
В общем в случае с мапом мы параллелим труево, потоки полностью параллельны и отобразить это можно как лист параллельными линиями мапится в другой лист. Рисунок параллельной свертки будет же выглядеть как полурешетка. Немного другая форма вычислений немного не такая, чем та, что ты видишь когда параллелишь маперы.
Аноним 28/11/16 Пнд 19:11:28  883777
>>883762
>>883771
Предлагаю переименовать в mempty
Аноним 28/11/16 Пнд 19:52:07  883789
>>883769
Взял первый попавшийся пример из гугла.
>>883774
>В общем в случае с мапом мы параллелим труево, потоки полностью параллельны и отобразить это можно как лист параллельными линиями мапится в другой лист.
Как мне кажется это схема, которая лишь описывает ограничение политики распараллеливания, то есть мы фактически говорим "дождаться результата применения функций вот в этом и в этом потоке и применить функцию в отдельном потоке". И вообще что ты подразумеваешь под "тру параллелим" - два потока Хаскеля, два потока операционной системы, два потока операционной системы привязанные к разным CPU?
Аноним 28/11/16 Пнд 20:02:03  883798
>>883789
Я имею в виду асинхронные процессы, как они реализованы мне вообще пофиг. у нас есть лист из 50 элементов мы делаем параллельный мап. Для этого спавнится 50 процессов внутри системы. Для программиста это выглядит так. В железе же у нас например только 1 алу и тогда планировщик распределяет нагрузку асинхронно. Если у нас 50 алу то они буду полностью параллельны.
Ну в общем наверное надо от этого термина дурного тру-не тру отказываться, в целом я понял что фолд можно вполне эффективно распределить на много потоков если операции коммутативны, ассоциативны. Чуть менее эффективно чем мап.
Аноним 28/11/16 Пнд 20:58:18  883832
Аноны, подскажите такую штуку.
Есть класс с двумя функциями, назовем скажем Foo() и Bar()
Функцию Foo() вызываю я сам, функцию Bar() вызывает другой элемент фреймворка, в неизвестный момент времени после вызова метода Foo(). Вопрос: Как мне, фп-way, передать некое значение из метода Bar() в точку вызова метода Foo()?
Если кому-то интересно - язык C#, платформа Xamarin.Android
Аноним 28/11/16 Пнд 22:03:11  883874
>>883832
Нихуя не понятно. Код на шарпе скинь.
Аноним 29/11/16 Втр 01:18:39  884022
>>883874
http://pastebin.com/NLuNXA6c если убрать все лишнее
Аноним 29/11/16 Втр 01:26:24  884027
>>883632
Ты хотел, а я делал (пилил с друзьями сайтец на С++ с вставками на асме)
Аноним 29/11/16 Втр 08:52:09  884086
>>884022
Через приватное поле класса, не? Нафига создавать себе проблемы на пустом месте, ну.
Аноним 29/11/16 Втр 11:55:20  884154
>>884086
> Мутабельное состояние
> Фп-way
Еще предложения?
Аноним 29/11/16 Втр 13:30:42  884190
>>884154
>void OnActivityResult
Этот метод нужен только для изменения мутабельного состояния. О каком ФП-way идет речь?
Аноним 29/11/16 Втр 14:47:58  884213
>>884027
>сайтец на С++ с вставками на асме
Хуйня. Надо было делать свой православный бинарный формат заместо проклятого хтмл, а ты просто пыжылся сделать более лучшую раздавалку текста.
Аноним 29/11/16 Втр 16:58:29  884271
>>884190
Я хочу отделить мутабельный код из фреймворка, на который я не могу повлиять, от моего кода, который будет чистым от побочных эффектов
Аноним 29/11/16 Втр 21:13:33  884463
>>884271
Отделяй, но в этом конкретном случае фреймвор диктует тебе как писать код. Сложно писать функционально в неподходящем окружении. Это, к слову, не понимают дурачки которые кукарекают что скала с появлением восьмой джавы стала нинужна.
Аноним 29/11/16 Втр 22:10:56  884520
>>884154
Локальное мутабельное состояние никак не противоречит никаким фп-уэй. Всем похуй, что там у тебя внутри одного класса происходит.

Алсо, какой фп-вей, ты же на сишарпе пишешь под ооп-фреймворк. Еще раз спрошу - нахера создавать себе проблемы на пустом месте?
Аноним 29/11/16 Втр 22:29:40  884541
>>884520
> Локальное мутабельное состояние никак не противоречит никаким фп-уэй. Всем похуй, что там у тебя внутри одного класса происходит.
Верняк, любую глобальную переменную можно считать просто слепком мира IO-монады, все процедуры просто описывают отображения мира
но для краткости это опущено как в синтаксисе так и в сигнатурах, но это сахарок -
всё чисто.
Аноним 29/11/16 Втр 22:54:07  884560
>>884541
Лол, ну так-то я не совсем это имел в виду. Я не про глобальные переменные, а про локальную мутабельность. Если чистая по сигнатуре функция создает внутри какое-то локальное мутабельное состояние, которое никак не ввходит наружу, то она все равно остается чистой для вызывающей стороны.
Аноним 29/11/16 Втр 23:05:34  884566
>>884560
> что там у тебя внутри одного класса происходит.
Тогда лучше было написать "внутри функции", потому что мутабельные поля класса - то же самое что глобальные переменные.
Аноним 29/11/16 Втр 23:14:04  884574
>>884566
> поля класса - то же самое что глобальные переменные
Ноуп. Объекты - замыкания для бедных.
Аноним 29/11/16 Втр 23:17:02  884577
>>884574
Монады - замыкания для богатых (умственно и духовно).
Аноним 29/11/16 Втр 23:19:54  884579
>>884577
Не уловил. Монады тут при чем?
Аноним 29/11/16 Втр 23:20:52  884581
>>884574
>>884577
Акторы - замыкания для богатых (материально).
Аноним 29/11/16 Втр 23:21:55  884582
>>884577
Массивы - замыкания для честных.
Аноним 29/11/16 Втр 23:22:55  884584
>>884581
Алло джо ето ти?
Аноним 29/11/16 Втр 23:26:08  884588
largep16a06rman[...].jpg (243Кб, 900x1125)
>>884582
Числа - замыкания для мутных.
Аноним 29/11/16 Втр 23:35:36  884600
>>884566
>поля класса - то же самое что глобальные переменные
Зависит от интерфейса класса. Если их изменения видны снаружи, то да, ты прав. Если это какой-то кэш для мемоизации что-то не могу больше примеров придумать, разве что для самопальной реализации ленивости, то нет.
Аноним 30/11/16 Срд 00:01:23  884642
>>884463
Сложно, ну что мешает
>>884520
локальные мутабельные переменные меняют состояние объекта класса
>>884581
А они кстати в моем случае не подойдут?
Аноним 30/11/16 Срд 16:43:47  885081
1480513204-.png (2Кб, 228x49)
TaPL не качается.
Аноним 30/11/16 Срд 16:50:37  885085
http://gen.lib.rus.ec/search.php?req=Types+and+Programming+Languages&lg_topic=libgen&open=0&view=simple&res=25&phrase=1&column=def
TaPL и ATiTaPL.
Аноним 01/12/16 Чтв 16:52:04  885767
10744875.jpg (192Кб, 702x702)
Ньюфаг написал свою первую монаду.
Посоны, как упрощать подобное:

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

Чёт трудно ориентироваться в этом вашем лифтинге.
Аноним 01/12/16 Чтв 17:12:06  885779
SchroDunGoneLos[...].jpg (46Кб, 704x396)
Снимок.JPG (19Кб, 797x147)
>>885767
Бля, забыл про разметку.
Аноним 02/12/16 Птн 09:54:16  886152
Снимок.PNG (41Кб, 850x198)
Господа, а поясните-ка мне одну вещь. Я правильно понял, что в конструктивной математике (в контексте данного треда - в языках с зависимыми типами) теорема Ферма доказывается в одну строчку пикрелейтед и ее фальшивость подтверждается тем фактом, что соответствующий такой спецификации тип пустой? Как написать конкретный код (неважно на чем) для проверки?
Аноним 02/12/16 Птн 11:01:25  886184
>>886152
Там же написано, что можно написать спецификацию, не зная, существуют ли программы, ей удовлетворяющие. Пикрелейтед нет никакого доказательства, там только формулировка соответствующей теоремы (т.е. тип). Доказательством была бы программа.
Аноним 02/12/16 Птн 11:03:46  886188
>>886184
Ну смотри, в прувере пишется спецификация, и если нет программ, удовлетворяющих такой спецификации, то спецификация противоречивая и ей соответствует пустой тип. Это же и есть доказательство теоремы Ферма, т.е. ее абсурдности.
Аноним 02/12/16 Птн 11:06:30  886191
>>886188
Как доказать, что таких программ нет?
Аноним 02/12/16 Птн 11:10:49  886194
>>886191
Попытаться их построить конструктивно, т.е. начать перебирать указанные в спецификации a b c и n. Как только найдется n, нарушающий равенство в последних скобках, считай доказательство построили.
Аноним 02/12/16 Птн 11:12:52  886195
>>886191
Доказать отрицание утверждения.
Аноним 02/12/16 Птн 11:27:15  886205
>>886194
Доказать отсутствие перебором? Ну-ну. Алсо, как из перебора натуральных чисел у тебя получается программа?

>>886195
Как?
Аноним 02/12/16 Птн 11:33:36  886207
>>886205
Ты не понял жи. Согласно этой спецификации требуется найти 4 натуральных числа, удовлетворяющих условиям спецификации. Правильность теоремы Ферма зависит от того, есть ли такие числа для всех случаев. Любой набор положительных чисел, не соответствующих спецификации является доказательством ложности теоремы Ферма.
Аноним 02/12/16 Птн 11:52:28  886218
>>886205
Т.е. программа в данном случае - это функция от 4 аргументов: (exist a:N)(exist b:N)(exist c:N)(exist n:N) -> (n>2&a^n+b^n=c^n).
Аноним 02/12/16 Птн 12:20:12  886235
>>886207
>>886218
Ебать ты даун. Как можно в 2016 путать forall и exists.
Аноним 02/12/16 Птн 12:22:14  886238
А, нет, ты прав. Эта сигнатура - это и есть утверждение отрицания теоремы Ферма.
Аноним 02/12/16 Птн 12:42:10  886245
Собственно, задача - конкретный код >>886152 этого. Чтобы можно было тралить сторонников неконструктивной математики, которая еблась с теоремой Ферма 200+ лет, а в конструктивной все доказывается одной коммандой на функциональной ЯП.
Аноним 02/12/16 Птн 12:52:26  886248
>>886245
Не будет никакого траленга. Всё точно так же: достаточно найти один контрпример и тогда получится записать терм с таким типом -> теорема опровергнута.
Аноним 02/12/16 Птн 13:42:47  886273
14761644471680.jpg (206Кб, 720x599)
О, тут уже анон опроверг теорему Ферма.
Скоро получит славу и признание научного сообщества за своё открытие.
Аноним 02/12/16 Птн 14:08:01  886292
>>886273
Специально для тебя, прямолинейного долбоёба:
> -> теорема опровергнута
> и ТОГДА теорема БУДЕТ опровергнута
Аноним 02/12/16 Птн 16:16:56  886381
https://youtu.be/fhOHn9TClXY
Аноним 02/12/16 Птн 16:26:56  886387
>>886218
Зойчем ты перепечатал это еще раз, это же на том пике написано.

>>886207
То есть тот факт, что эта теорема истинна, тебя не смущает? Еще раз: доказать отсутствие перебором? Алсо, как из перебора натуральных чисел у тебя получается программа?
Аноним 02/12/16 Птн 16:54:08  886407
>>886387
Ты перебираешь на бумаге или ещё где, а когда найдёшь 4 подходящих числа, тогда можешь их вписать в код и они будут термом-доказательством вот этого типа: (exist a:N)(exist b:N)(exist c:N)(exist n:N) -> (n>2&a^n+b^n=c^n). Всё, больше никак. Если не найдёшь такие 4 числа - доказать этот тип не сможешь.
Аноним 02/12/16 Птн 17:02:52  886418
>>886407
Замечательно.
Аноним 03/12/16 Суб 01:06:45  886669
>>886194
>Попытаться их построить конструктивно
Пошол нахуй, интуитивистский питух.
Аноним 03/12/16 Суб 01:48:10  886696
>>886669
Интуиционисткий.

Починил таки.
Аноним 04/12/16 Вск 10:22:52  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“, лол.
Аноним 04/12/16 Вск 10:46:09  887441
Да, как я из его слов понял, как это примерно может выглядеть. Вот пишешь либу, решаешь ее зарелизить. Делаешь неймспейс либраринейм.апи.в1. Помимо него у тебя есть еще и либраринейм.приватный-стафф. Делаешь джар\гем\крейт, модуль короче, в котором пишешь, что он провайдит либраринейм.апи.в1 (а про приватный-стафф ничего не пишешь). В следующем релизе решаешь добавить еще одну функцию в апи, например, - это все еще в1-компатибл апи. Еще через релиз понимаешь, что тебе надо переименовать (то есть убрать одну и добавить другую) функцию - создаешь либраринейм.апи.в2, экспортируешь туда весь в1 апи и делаешь замену, релизишь. Приватный-стафф остался тот же, реюзаешь. в1 апи остался тот же, ничего не ломаешь. В мавене теперь лежит два модуля: только с в1 и с двумя в1 и в2 апи, оба называются "либраринейм", второй расширяет первый, ничего не сломалось. Потом делаешь следующий релиз и все переписываешь с нуля, апи.в3. А первые два апи выкидываешь, чтобы не загромождать код. Тогда модуль будет называться уже, условно, "либраринейм-некст", потому что он ломает совместимость => другое имя. Еще по идее можно вытаскивать все эти в1 и в2 из гита, а не держать в стейджинге. И все эти переименования будут формально проверяться, то есть если попытаешься запушить под тем же именем модуль, из которого что-то выкинуто - компайлтайм эррор (точнее релиз-тайм), если код функции изменился по сравнению с прошлым коммитом - релизтайм ворнинг, тут уже придется повериьь на слово, что поведение не изменилось.
Аноним 04/12/16 Вск 12:39:32  887493
>>886387
>Еще раз: доказать отсутствие перебором?
Либо присутствие. А как ты еще предлагаешь доказать что-то кроме собственно построения вычислимого объекта и его предъявления в качестве доказательства?
>как из перебора натуральных чисел у тебя получается программа?
Тут >>886407 за меня ответили. Пустой тип соответствеут абсурдности изначального высказывания, непустой - доказательству такового высказывания, это интерпретация логических констант по Гейтингу. Программа = функция в конструктивном смысле, т.к. принимает нечто на вход и выдает нечто на выходе. Пример - лямбда же, да и вообще все функциональное программирование.
>>886696
Ты хоть название для начала писать научись, потом предъявляй что-то.
Аноним 04/12/16 Вск 23:12:16  888058
>>887493
Ты меня не так понял. Ладно, неважно.

>>887493
Я и не предъявлял, а починил предъявлявшего.
Аноним 05/12/16 Пнд 04:47:25  888195
Хуле тонем
DI зависимости на грязные функции - как сделать? Аноним 05/12/16 Пнд 12:03:11  888294
Пример
У меня есть чистые функции func1 и func2 и "грязная" funcIO (она делает запрос к вебу)
func1 вызывает func2, которая вызывает funcIO

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


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

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

Сейчас я храню такие "грязные" функции как бы в глобальном словаре и планирую в тестах заменять его элементы на фейковые.
Минусы: появляется некая неявность в программе, те вызываю функцию и не знаю заранее, а вдруг где-то внизу есть запрос в сеть и тп.
Аноним 05/12/16 Пнд 12:26:08  888305
>>888294
>протестить
Например http://www.parsonsmatt.org/2016/07/14/rank_n_classy_limited_effects.html
Аноним 05/12/16 Пнд 13:05:49  888340
>>888294
Передавать всем функциями словарь env с компонентами, которые делают всю грязную работу. Это устоявшаяся практика тащем-то. Алсо, если у тебя ф2 вызывает ио, а ф1 вызывает ф2, и ты хочешь тестировать ф1, то у тебя скорее всего неоптимальная архитектура. Надо стараться, чтобы в каждом модуле только функции верхнего уровня требовали енв, а вся логика была в чистых функциях, которые бы чейнились с грязными функциями линейно, а не вложенно. Не всегда так красиво получается сделать, конечно, ну и без контекста непонятно, что там у тебя с этим.
Аноним 05/12/16 Пнд 13:21:03  888355
>>888340
OK, спасибо что рассказал своим словами.

Постараюсь поднять наверх запрос к вэбу и перенести список IO фунций из глобального стейта в env.
Аноним 05/12/16 Пнд 14:49:09  888427
>>888340
>ф2 вызывает ио, а ф1 вызывает ф2
>вызывает
Ну что же вы, функцаноны.
Аноним 05/12/16 Пнд 22:55:19  888804
Видео для новичков от трансгендера функционального программирования:
https://www.youtube.com/watch?v=25u-pp-7PHE
Аноним 06/12/16 Втр 06:35:29  888924
>>888427
Не понял, чего?
Аноним 06/12/16 Втр 06:37:03  888925
>>888804
Больше трансгендеров богу трансгендеров! https://youtu.be/lvclTCDeIsY
Аноним 06/12/16 Втр 07:04:08  888928
>>888804
>>888925
Всё, ФП зашкварено.
Аноним 06/12/16 Втр 07:40:27  888940
>>888928
Изначально такое было.
Аноним 06/12/16 Втр 10:22:04  889008
>>888925
Раз пошла такая пьянка:
https://www.youtube.com/watch?v=DHubfS8E--o
Аноним 06/12/16 Втр 12:34:45  889076
>>888928
Эх, щас бы вспомнить о том, что Тьюринг был гей-шлюхой...

>>889008
Она же не транс, ты чего. or is she?
Аноним 06/12/16 Втр 12:36:43  889080
>>889076
>
это транс
Аноним 06/12/16 Втр 12:39:58  889082
>>889080
Да ладно! Не, не верю, я ее видел до этого дохрена раз, и никакие детекторы трансов во мне не сработали... Бля, я что, зашкварен теперь?! Да не транс она.
Аноним 06/12/16 Втр 20:11:43  889385
>>888925
Начинать презенташку с "мы тут все женщины, делай с этим, проклятый цис-скам", а потом просить помощи - это какой-то просто next level маркетинга.
Аноним 06/12/16 Втр 20:49:19  889414
>>889385
> цис-скам
Забавно, что ни мне, ни остальным присутствовавшим в зале даже в голову ничего такого не пришло (потому что она ничего такого и не говорила), но insecure slavshit как всегда нашел повод, чтобы обидеться, хе-хе.
Аноним 06/12/16 Втр 21:03:13  889423
>>889414
>в голову ничего такого не пришло
Потому что ты живёшь с своём мирке, и тебя феминистки и прочие социальносправедливые воины ещё не заебали.
>она ничего такого и не говорила
Ой-вей, тебе цитатки дать? А вначале что это было? Ленгвидж мейд бай вимен, дил виз ит, експект зем ту нов беттер зан ю, мы тут не любим вайт цис-мелес и делаем свой язык как хотим - вот это вот всё?
>обидеться
Сколько тебе лет?
Аноним 06/12/16 Втр 21:08:47  889432
>>889385
>цис хуис маркетинг
Сука, ебаное программирование. Только червь-пидор в 2016 году считает эту профессию илитной. Как хорошо было на васме, где ебанутых слали на хуй и поливали говном. А современное ойти целиком состоит из пидоров.
Аноним 06/12/16 Втр 21:13:20  889435
>>889423
Ну так если тебя заебали какие-то воображаемые враги, то почему мирок у меня, а?

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

Обижаешься ты, а спрашиваешь сколько лет меня, хех. Немного меньше тридцати.
Аноним 06/12/16 Втр 21:13:56  889438
>>889432
Ололо, еще один славшит стриггерился, найс.
Аноним 06/12/16 Втр 21:16:16  889441
>>888804
какой-то толстый негр в нелепых рюшках
промотал к концу, конечно не забыл всем напомнить что он transwoman of color
проверил на гитхабе, в репе ничего кроме js/php
делает как я понял всякие ui и фронтенды
Аноним 06/12/16 Втр 21:27:19  889452
>>889432
Пидоры не могут в программирование, и ни в какую другую разумную деятельность ввиду нарушений в работе ЦНС, проявляющейся в ригидной деградации интеллекта. Их сознание состоит из подобных фраз: >>889438 на 80-90 процентов, эти фразы настойчиво повторяются ежедневно, годами, почти без вариаций. Т.е., фактически, пидор - это просто сломанный спамбот, который несёт ненужную раздражающую пургу в пустоту.
Аноним 06/12/16 Втр 21:32:55  889457
>>889452
Смотрите-ка, манечка детектировать начала, лол. Продолжай, пожалуйста.
Аноним 06/12/16 Втр 21:38:02  889461
>>889457
> манечка
> начала
Пошел на хуй, пидорас!
Аноним 06/12/16 Втр 21:43:13  889466
>>889461
Почему ты обсуждаешь хуи и геев в треде про фп?
Аноним 06/12/16 Втр 21:45:29  889467
>>889466
Потому что ты пидор и надо послать тебя на хуй?
Аноним 06/12/16 Втр 21:56:11  889476
>>889435
>Да, дай цитатки, где там про цис-скам было
Не дам. Удалил видео уже. В самом начале, ещё до представления авторов языка он говорит про white cis-males. Наверное, даже до четвёртой минуты. И проблема в тебе, если ты знаешь, что социально-ориентированные подразумевают под white cis-males.
Аноним 07/12/16 Срд 07:34:18  889664
>>889467
> пидор
> хуй
Иди подрочи уже и успокойся.

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

Вообще, это очень забавно, что их поинт как раз в том и состоит: "у меня есть пизда, но что имеет значение - это мой код, so let's talk about that" - и славскам, разумеется, гневно обсуждает их гениталии/гендер/социальную позицию - что угодно, кроме собственно кода. Ну хули делать, иди радио радонеж послушай да блинов с лопаты наверни.
Аноним 07/12/16 Срд 07:55:36  889667
>>889664
Но зачем мне успокаиваться, когда я могу хуесосить тебя, охуевшего гнойного обосранного пидора-чмошника?
Аноним 07/12/16 Срд 07:58:28  889668
>>889667
Матешу сделал?
Аноним 07/12/16 Срд 10:18:09  889702
>>889668
Матан нинужен для успешного ФП-Программиста.
Аноним 07/12/16 Срд 10:36:22  889714
Pcprincipal.png (179Кб, 458x533)
>>889664
Аноним 07/12/16 Срд 10:49:13  889722
Ну вот и славно, на этом и закончим.
Аноним 07/12/16 Срд 11:56:59  889746
>>889664
>Конечно не дашь
Конечно, не дам. Что проще - мне скачать целиком видео, чтобы дать тебе точное время и получить в ответ "это нищитается и всё нитак", или тебе тыкнуть на ссылку, посмотреть это видео пять минут (первую даже можешь промотать) и самому во всём убедиться? Ведь, судя по всему, тебе важно победить в интернете, и видео ты смотреть не будешь, даже если я дам тебе точные секунды.
>выдумал слова
Ай-яй-яй. Да, там не было сказано слова "скам", но если ты посмотришь-таки видео, а потом пойдёшь на тумблер, сходишь в твиттеры и блоги феминисток, погуглишь social justice warriors, white male supremacy и т.д., то ты сам поймёшь, что мне не понравилось. Но, предупреждаю тебя, не лезь туда. После этого ты никогда больше не будешь прежним.
Можешь не отвечать. Я, например, больше не буду, пока ты не ознакомишься с предметом. И вообще, иди-ка ты чекни свои привилегии.
Аноним 07/12/16 Срд 12:12:14  889751
>>889746
Чекнул тебе за щеку своими хуеблядскими 18 сантиметрами, проблемы?
Аноним 07/12/16 Срд 12:44:35  889764
>>889664
>"у меня есть пизда, но что имеет значение - это мой код,
Это норма, когда хочешь обсудить свой код, но вступительное слово посвящено пизде? Может тоже стоит начинать совещния типа "У меня хуй, но давайте обсуждать проблемы на продакшене."?
Аноним 07/12/16 Срд 12:49:06  889766
>>889746
Зойчем тебе скачивать видео? Ты что, наркоман? Алсо, я как бы его смотрел (даже больше, лол) перед тем, как сюда вкинуть, сюрприз.

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

>>889764
Вступительное слово посвящено комьюнити билдингу. И да, в цивилизованных белых странах это норма.
Аноним 07/12/16 Срд 13:00:24  889771
>>889766
>Зойчем тебе скачивать видео?
Потому что прогрессивные веб-технологии, блягодаря которым у меня ютуб не работает.
>я как бы его смотрел (даже больше, лол)
Интересно, и что же ты с ним делал? Наяривал на белобрысую, небось?
Аноним 07/12/16 Срд 13:04:22  889773
>>889766
>поинт как раз в том и состоит: "у меня есть пизда, но что имеет значение
>Вступительное слово посвящено комьюнити билдингу
комьюнити билдинг - это что-то вроде свинг вечеринок для трансгендеров?
Аноним 07/12/16 Срд 13:08:31  889775
>>889773
Да.
Аноним 07/12/16 Срд 13:11:10  889776
>>889771
Дай угадаю: в том, что у тебя не работает ютуб, виноваты проклятые американцы с их проклятыми трансами и проклятыми веб-технологиями, лол?

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

>>889773
Предлагаю вам тебе? починить ютуб, а потом погуглить про это, лол. По-английски местные иваны хоть шпрехают?
Аноним 07/12/16 Срд 13:17:11  889777
maxresdefault.jpg (33Кб, 1280x720)
Не ругайтесь ребята! Давайте лучше обсудим монады.
Аноним 07/12/16 Срд 13:28:11  889782
>>889776
>Дай угадаю
Друг мой, да у тебя всё совсем плохо. Если сначала я ещё думал, что ты всего лишь не в теме, то чем дальше, тем больше убеждаюсь, что ты просто типичный сосачевский долбоёб. Вот ты уже нафантазировал и "лоллируешь".
>Предлагаю
>починить ютуб
А вот теперь я уже в его глазах стал гуглом.
Аноним 07/12/16 Срд 13:33:20  889786
>>889777
У меня такое чувство, что вместо гормонов она пьет пиво, лол.

>>889782
Я с тебя лоллирую с самого начала нашего конверсейшена, клоунишка, просыпайся. И ютуб почини, тяжпрограммист, лол.
Аноним 07/12/16 Срд 14:02:50  889810
>>889786
Смузи с бороды стряхни, ангулярщик.
Аноним 07/12/16 Срд 17:07:05  889962
>поинт
>конверсейшена
Аноним 07/12/16 Срд 17:15:25  889969
>>889962
нам нужна физибл агенда.
Аноним 07/12/16 Срд 21:24:01  890119
2016-12-07-2123[...].png (107Кб, 884x918)
Решил попробовать пройти курс по структурам данных решая задачки на хаскелле, и на второй уже обосрался.

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

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

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


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

Анон, подскажи как переписать это на хаскел pastebin.com/mtXaNdNt
Аноним 07/12/16 Срд 21:39:22  890124
>>890119
Сам вкатываюсь потихоньку. Я бы так сделал: функция, в которой берем элемент, берем следующий элемент по индексу из значения предыдущего элемента и т.д. пока не получим -1, . Рекурсивно применяем эту же функцию для следующего элемента. Возвращаем максимальное количество шагов, полученных проходом по элементам и в результате применения функции к следующему элемету.
Аноним 07/12/16 Срд 21:45:22  890127
>>889786
>У меня такое чувство, что вместо гормонов она пьет пиво
В 1952 году Алан Тьюринг был признан виновным по обвинениям в совершении «грубой непристойности» в соответствии с «поправкой Лабушера», согласно которой преследовали гомосексуальных мужчин. Тьюрингу был предоставлен выбор между принудительной гормональной терапией, призванной подавить либидо, или тюремным заключением. Учёный выбрал первое.
Аноним 07/12/16 Срд 21:52:18  890130
>>890127
Трап != пидор. Тем более что Тюринга заставили. И судя по фоткам он всегда был ухоженной стройняшей.

>>889786
Ну так современная ослиная моча которую называют пивом даёт тот же, хоть и слабый, эффект, но с побочками в виде пуза.
Аноним 07/12/16 Срд 22:05:08  890140
>>890119
суть строки:
> (+ 1) . maximum . map height $ children
для всех детей вызываем функцию height, находим максимум среди всех высот, добавляем 1
Аноним 07/12/16 Срд 22:21:35  890145
>>890140
>>890124

такое я уже писал, но оно не проходит тесты на больших деревьях (слишком долго считает), в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторно, а как сделать подобное в haskell варианте - хз
Аноним 07/12/16 Срд 22:52:33  890155
haskell2.png (4Кб, 302x256)
>>890145
>такое я уже писал, но оно не проходит тесты на больших деревьях
>пройденные ноды и не считаю их повторно
Поскольку мы имеем чистые функции, хаскель может кэшировать результат применения функции к набору уникальных значений аргументов. В этом плане тебе ничего запоминать не надо. А считает долго из-за иммутабельности, при каждом применении функции создается копия твоего дерева. Тебе надо дерево как глобальный объект представить, но я пока ХЗ как это сделать. И вообще я не понимаю зачем там что-то повторно считать нужно.
Аноним 07/12/16 Срд 22:54:15  890156
>>890145
хаскель делает такое из коробки, лол)
Аноним 07/12/16 Срд 23:25:55  890180
>>890145
>в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторно
А что, есть шанс при подсчёте высоты наткнуться на ноду больше одного раза? Это же дерево.

>>890155
> хаскель может
Даже кофе варить. Есть пруф что он варит?
> при каждом применении функции создается копия твоего дерева
С чего ты это взял?

>>890156
Пруф.
Аноним 07/12/16 Срд 23:40:23  890191
>>890119
Сдаётся мне, тут не нужно строить дерево.
Аноним 07/12/16 Срд 23:46:07  890197
haskell3.png (3Кб, 425x196)
>>890180
Да, так лучше наверно будет.
А пруфов не будет, нужно верить.
Аноним 07/12/16 Срд 23:59:32  890202
>>890191
я и не строю, изначально мысль была следующая считать по порядку высоту для каждой ноды из списка на входе, попутно занося посчитанные ноды в отдельный список, чтобы не считать их по несколько раз, в принципе можно построить дерево, и посчитать его высоту как предлагали выше, но как сделать дерево из входного списка я тоже хз.

>>890197
у тебя вроде куска кода не хватает (deep2)
Аноним 08/12/16 Чтв 00:00:33  890204
>>890145
>в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторно
Да, сорян, я тут >>890180 поторопился. Если ты не строишь дерево, то тебе, конечно же, нужна мемоизация.
Data.Map.Strict поможет, надеюсь.
Аноним 08/12/16 Чтв 00:01:04  890207
>>890202
боже, я уже по-русски писать разучился
Аноним 08/12/16 Чтв 00:23:12  890214
>>890202
>у тебя вроде куска кода не хватает (deep2)
Это собственно весь код и есть. Опечатка, deep1 конечно. Здесь не строится дерево. Кстати можно оптимизацию небольшую сделать, строить высоту только для листьев. То есть для тех элементов списка, индексов которых собственно в списке нет. То есть в примере получается для 0 2 и 3 элементов. Можно условие в генераторе списка зафигачить. Завтра подумаю.
Аноним 08/12/16 Чтв 00:34:39  890219
haskell4.png (4Кб, 533x194)
>>890214
Хотя чего тут думать-то.
Аноним 08/12/16 Чтв 00:43:00  890222
>>890219
тоже пытался так сделать, но на большом (100000 элементов) списке все равно виснет.
Аноним 08/12/16 Чтв 00:44:08  890223
>>890222
> используется (!!)
> чёт виснет
Miracle!
Аноним 08/12/16 Чтв 01:02:17  890228
>>890223
>>890222
Ну да !! сложность O(n). Надо будет на массивах наверно переделать.
Аноним 08/12/16 Чтв 01:05:24  890229
>>890228
А там и мемоизацию запилишь на массивах.

Короче, задача такая, что её решение никак не ложится на ФП "красиво".
Аноним 08/12/16 Чтв 01:05:40  890230
>>890219
>>890223
вот я дурак конечно...
завтра переделаю с массивами вместо списков.
Спасибо всем!
Аноним 08/12/16 Чтв 05:05:32  890289
>>889810
> implying angular is hipster
Как там в 2010?
Аноним 08/12/16 Чтв 19:47:19  890655
hask.png (6Кб, 398x116)
>>890230
Ну ты как там, переписал? Вообще хорошая задачка, помогает разбираться. Я вот переписал с мемоизацией. Не проверял работает или нет, но по идее должно. Следующий этап будет - своя мемоизация на IntMap, прямо как вот этот >>890229 анон наванговал.
Аноним 08/12/16 Чтв 21:26:55  890730
2016-12-08-0036[...].png (25Кб, 595x293)
наговнокодил на векторах, но гдето запутался. На больших инпутах не падает, но считает неправильно.

а что за плагин, который -> заменяет на →
Аноним 08/12/16 Чтв 21:28:28  890732
2016-12-08-2037[...].png (100Кб, 772x630)
>>890730
>>890655

не тот скрин
Аноним 08/12/16 Чтв 21:29:57  890733
>>890730
Шрифт с лигатурами очевидно. Fira code, haskellig там.

Пойду дальше порофлю с того, как хаскелимакаки всем тредом не могут высоту дерева посчитать. Хороший язык.
Аноним 08/12/16 Чтв 21:55:55  890755
2016-12-08-2130[...].png (98Кб, 703x628)
опять проебался
Аноним 09/12/16 Птн 00:22:55  890861
161209001313.png (6Кб, 399x260)
>>890755
Чет похоже на императивщину. Не знаю как ты большие деревья генеришь, но попробуй вот такой вариант.
Да, это FiraCode.
Аноним 09/12/16 Птн 00:24:29  890863
>>890861
Ты задолбал с deep. Глубина это depth.
А в задаче вообще просят height
Аноним 09/12/16 Птн 01:40:35  890899
>>890119
Так, теперь быстро объясняй мне, почему высота дерева не равна количеству уникальных указателей
Аноним 09/12/16 Птн 01:49:34  890901
>>890899
Количество уникальных указателей: 2⁶⁴
Аноним 09/12/16 Птн 02:44:17  890910
>>890901
Ты дал совершенно даунский ответ на вполне понятно поставленный вопрос. Впрочем я и без тебя разобрался, не стоило

Аноним 09/12/16 Птн 02:50:40  890912
>>890910
Даун, почему у тебя unit type обозначен значком пустого множества? Даже если выкинуть ⊥, то это не будет пустым типом.
Аноним 09/12/16 Птн 02:56:05  890914
>>890912
Даун, потому что создатели хаскелевого мода для имакса так считают, даун
Аноним 09/12/16 Птн 02:56:51  890915
>>890914
Значит создатели мода дауны. Как и пользователи.
Аноним 09/12/16 Птн 03:00:17  890916
>>890910
И где там указатели?
Аноним 09/12/16 Птн 03:03:21  890917
>>890915
Ясно. В ФП на уровне чуть выше рекурсии списков и мапов с филтрами наш многоуважаемый опущ не умеет. Иначе как объяснить что простейшая программа с мемоизацией при помощи State Monad оказалась ему не под силу Зато он умеет рассуждать о том, кто здесь даун, а кто не очень, рассматривая кастомные темы в чужих редакторах.
>>890916
Тебе пальцем показать, или лазерной указкой?
Аноним 09/12/16 Птн 03:05:33  890918
>>890917
>Ясно. В ФП на уровне чуть выше рекурсии списков и мапов с филтрами наш многоуважаемый опущ не умеет.
Откуда такие выводы?
> Тебе пальцем показать, или лазерной указкой?
Как тебе удобнее.
Аноним 09/12/16 Птн 03:07:28  890919
>>890918
Например оттуда, что я зайдя в тредик за 15 минут накатал программку. А ты сподобился выдавить из себя "даун, даун, даун" и, в общем то, всё
>Как тебе удобнее.
Справа в буфере с интерпретатором, поступают на вход с функции treeDepth
Аноним 09/12/16 Птн 03:10:43  890921
>>890919
>Например оттуда, что я зайдя в тредик за 15 минут накатал программку.
Молодец. Что не отменяет твоих незнаний элементарной теории множеств.
>Справа в буфере с интерпретатором, поступают на вход с функции treeDepth
Только treeDepth не считает число уникальных указателей.
Аноним 09/12/16 Птн 03:12:50  890922
>>890921
>Unit -тип содержащий один элемент
>Тип
>Теория множеств
Ясно, понятно
>Только treeDepth не считает число уникальных указателей.
Да, не считает. Зачем их считать, их ведь 2^64
Аноним 09/12/16 Птн 03:15:09  890923
>>890922
В общем, ты слился, как все любители попонтоваться.
Аноним 09/12/16 Птн 03:31:23  890926
>>890910
>Ты дал совершенно даунский ответ на вполне понятно поставленный вопрос.
Нет, непонятно.
> Впрочем я и без тебя разобрался, не стоило
Что, с пруфом "высота дерева == числу `указателей'" не получается?
Аноним 09/12/16 Птн 03:35:24  890927
>>890926
>Что, с пруфом "высота дерева == числу `указателей'" не получается?
Что за бред ты несёшь?
Аноним 09/12/16 Птн 03:37:07  890929
>>890927
Какой ещё бред, даун? Это ты заметил, что высота дерева == числу уникальных указателей. Я тебя и спрашиваю, почему ты это не используешь. С пруфом проблемы?
Аноним 09/12/16 Птн 03:42:27  890930
>>890929
В предыдущем твоём посте ты проебал слово "уникальный", что изменило весь смысл на практически противоположный
>Это ты заметил, что высота дерева == числу уникальных указателей
Я попросил тебя переубедть меня. Ты не сподобился и я переубедил себя сам
>С пруфом проблемы?
Значение знаешь? Учи мемы чтобы не быть баттхёртом
Аноним 09/12/16 Птн 03:43:45  890931
>>890910
спасибо, анон, работает!

пиздец, 15 минут, а я третий день сижу...
Аноним 09/12/16 Птн 03:43:51  890932
>>890930
>Ты не сподобился и я переубедил себя сам
Контрпример.

>Значение знаешь?
Пит буль.
Аноним 09/12/16 Птн 03:44:22  890933
>>890931
>15 минут, а я третий день сижу...
Я уже давно написал: юзай Data.Map
Аноним 09/12/16 Птн 03:45:26  890934
>>890933
да я пытался вроде, правда без монады
Аноним 09/12/16 Птн 03:46:25  890935
>>890934
Гонять Map аргументом еквивалентно заворачиванию в State-монаду.
Аноним 09/12/16 Птн 03:47:56  890936
>>890931
>пиздец, 15 минут
Решал раньше похожую задачу,на самом то деле, поэтому быстра. Так бы долго втыкал, наверное
Аноним 09/12/16 Птн 04:09:12  890938
>>890936
Где контрпример?
Аноним 09/12/16 Птн 05:20:04  890950
>>890931
Можешь просто считать список чисел в set и размер set будет путём.
Аноним 09/12/16 Птн 05:20:34  890951
>>890950
В смысле длиной самого длинного пути.
Аноним 09/12/16 Птн 07:32:42  890969
>>890950
>>890951
Хотя да, это неверно.
Аноним 09/12/16 Птн 08:44:27  890984
>>890910
Сап, анон, напиши пожалуйста функцию najtiElementVMassive, а то я 3-й день уже сижу!
Аноним 09/12/16 Птн 12:39:12  891053
mem.png (5Кб, 391x257)
Аноны, а в такой реализации fun2 мемоизируется, так как определена в бесточечном стиле через memoFix2, то есть при вычислении высоты дерева из определенного узла должны использоваться закешированные значения высоты из вышележащего узла, если они уже вычислены конечно. И fun4 тоже мемоизируется, так как определена в бесточечном виде, а l исплоьзуется из области видимости where. То есть при при обращении к значению списка по индексу, только данное значение добавляется в массив (из-за ленивости), и при следующем обращении будет обращение уже к массиву по индексу. Или я где-то ошибся в рассуждениях?
Аноним 09/12/16 Птн 12:47:02  891055
Я так и нипонел, нахуй вы используете кокоето гавно, когда есть Data.Tree?
Аноним 09/12/16 Птн 12:51:03  891057
>>891055
Ну вот Хаскелл например учу, с мемоизацией хочу разобраться.
Аноним 09/12/16 Птн 13:04:53  891064
>>890119
кстати, а ведь при таком условии нельзя сделать циклический граф, который будет связан с рутом, разве нет? Какой смысл в мемоизации?
Аноним 09/12/16 Птн 13:26:51  891071
>>891064
> Какой смысл в мемоизации?
Смысл в том, что дерево не строим.
На входе у нас есть пары (вершина, родитель) и высоту считаем для вершины считаем как 1 + высота_от_родителя_до_корня
Аноним 09/12/16 Птн 13:27:18  891073
>>891071
> высоту считаем для вершины считаем как
высоту для вершины считаем как
Аноним 09/12/16 Птн 13:28:56  891075
>>890938
Сам придумывай
"4 -1 4 1 1 3" Высота по-прежнему 3, уникальных идентефикаторов - 4
>>891064
Потому что без мемоизации сложность по времени O(n^2)
Аноним 09/12/16 Птн 13:30:16  891077
>>891075
>Сам придумывай
Уже.
Аноним 09/12/16 Птн 14:02:29  891092
>>891053
Аноны, поясните же, я все правильно понял или где-то ошибаюсь?
Аноним 10/12/16 Суб 02:46:40  891468
>>891092
мне кажется гдето ошибаешься, потому что тесты не проходит (виснет).

залил архив с тестами если интересно: http://rgho.st/6RdYLFPy9
Аноним 10/12/16 Суб 03:44:57  891478
>>891468
Наконец-то тесты.
Аноним 10/12/16 Суб 09:54:19  891515
Screenshot at 2[...].png (10Кб, 899x274)
>>890119
>>891468
>>891478
Раз уж появились тесты, решил попробывать написать.
Считает правильно, но медленно.
https://cpy.pt/HyxJaMkC
Аноним 10/12/16 Суб 11:12:10  891548
Screenshot at 2[...].png (11Кб, 1207x290)
>>891515
Вот так обрабатывает 24 теста за 11 секунд
https://cpy.pt/KKBwUx8N
Используется https://hackage.haskell.org/package/multimap
Аноним 10/12/16 Суб 11:15:37  891551
>>891548
https://cpy.pt/Y1R263zg
self-fix Аноним 10/12/16 Суб 11:30:54  891560
>>891548
В девятой строчке надо заменить
(Map.insert (-1) 1 Map.empty)
на просто
Map.empty


На ответ это не влияет, но текущий вариант выглядит странно. Никакой вершины (-1) нет
self-fix2 Аноним 10/12/16 Суб 11:35:15  891562
>>891548
Да и, честно говоря, Map там нахрен не нужен. Попробую без него переделать.
Аноним 10/12/16 Суб 12:07:27  891585
>>891562
9 секунд на все тесты
Аноним 10/12/16 Суб 14:54:38  891676
>>891585
на моем компе вариант этого анона>>890910 продит все тесты за 6 секунд

а вариант на питоне за три, лол
Аноним 10/12/16 Суб 14:56:37  891680
>>891676
>на моем компе вариант этого анона>>890910 продит все тесты за 6 секунд
А мой вариант за сколько?
Аноним 10/12/16 Суб 14:57:48  891682
>>890910
Что за редактор?
Аноним 10/12/16 Суб 17:07:06  891795
>>891682
имакс жи, в треде написано
Аноним 10/12/16 Суб 17:14:16  891806
>>891676
Можно ускорить выпиливанием ленивости через BangPatterns. Также, вместо IntMap можно мемоизировать ST массивом, и по идее это даст хороший прирост производительности, но код скорее всего получится не очень
Аноним 11/12/16 Вск 00:14:54  892118
>>891468
Ммм, как их выполнить? Даже как и гуглить не знаю то, лол
Аноним 11/12/16 Вск 01:35:53  892157
>>892118
это входные данные (номерные файлы) и результат который должен получиться (файлы с расширением .a)

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

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

>>891806
BangPatterns ничего не меняют, пытаюсь разобраться с ST монадой. Я правильно понимаю что мне надо поменять State (IntMap) на State(STArray) и написать еще один метод, который будет обновлять значения в этом STArray?
Аноним 11/12/16 Вск 03:03:34  892176
>>892157
>Кстати по условию задачи все тесты должны прогоняться за 2 секунды
Все или каждый?
Аноним 11/12/16 Вск 03:17:12  892181
>>892176
вроде как все, по крайней мере остальные две задачи получилось решить так, что бы за указанное время прогонялись все тесты
Аноним 11/12/16 Вск 03:20:09  892182
>>892181
Но ведь ты сдал вариант на хаскеле, который работает 6 секунд, хотя надо 2.
Аноним 11/12/16 Вск 03:30:46  892187
>>892182
нет еще, я только сегодня третью сделал и надо сначала курс оплатить

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

правда, в Haskell MultiMap используется
Аноним 11/12/16 Вск 04:03:18  892190
>>892188
Ну пока лучшее решение на хаскелле - 25 строк. Насколько я понимаю узкое место там как раз IntMap с logn временем на поиск и добавление элементов, то есть надо переделывать на основе изменяемых массивов, а то что я пока нагуглил на эту тему выглядит как пиздец
Аноним 11/12/16 Вск 10:05:53  892250
Screenshot at 2[...].png (16Кб, 807x504)
>>892190
4.5 секунды
Аноним 11/12/16 Вск 10:08:25  892255
>>892250
Ну и императивная дрисня получилась, однако.
Аноним 11/12/16 Вск 12:29:15  892317
Screenshot at 2[...].png (60Кб, 765x358)
>>892255
Чуток быстрее (4.2-4.3 сек), из-за отсутствия лишних преобразований.
А может из-за хипстерского Атома.
Аноним 11/12/16 Вск 12:59:15  892333
>>892188
Решение на педоне: сажает робота на марс
Решение на haskell: взрывается на старте из-за несоответствия временным критериям
Зато на пять строчек короче!
Аноним 11/12/16 Вск 13:02:47  892336
>>892333
>Real Time системы
>Пиздон
Мда, кек, что ещё скажешь?
Аноним 11/12/16 Вск 13:12:30  892340
>>892333
> несоответствия временным критериям
Тому херу конечно виднее, но лично я сомневаюсь насчёт трёх секунд на все тесты.
3 секунды на 1 тест. Всё в порядке.
Аноним 11/12/16 Вск 13:36:42  892355
2016-12-11-1333[...].png (56Кб, 544x453)
>>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.
Аноним 11/12/16 Вск 13:47:09  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, а это уныло). Везде подразумевалось время на решение для одного примера входных данных

Кстати, на скрине время для какого языка и варианта?
Аноним 11/12/16 Вск 14:00:37  892384
>>892370
а может ты и прав...
на скрине - питон, код выше кидал
Аноним 11/12/16 Вск 14:02:23  892387
>>892384
https://cpy.pt/Hpdz9amL вот хачкель, последний вариант
Аноним 11/12/16 Вск 14:04:52  892391
>>892384
>а может ты и прав...
Нет, ну сможешь создать условия, при которых каждый тест укладывается в ограничения, а в сумме они не укладываются и система зарежектит такой вариант, то ок.
Но это крайне маловероятно. Сегодня набор тестов один, завтра — другой. Ограничения на время указывают для ограничений на размер входных данных.
Аноним 11/12/16 Вск 14:08:03  892399
В чем разница между выражением и лямбда функцией? Если опустить технические детали это же одно и тоже?

Зы. Читаю книгу по лиспу какого-то финна
Аноним 11/12/16 Вск 14:19:35  892408
>>892157
>для линукса - выше скриптик был,
Покажи. Либо его нету либо я долблюсь в глаза
Аноним 11/12/16 Вск 14:20:42  892409
>>892408
https://cpy.pt/Y1R263zg
если одну строчку сверху можно назвать "скриптиком"
Аноним 11/12/16 Вск 14:43:17  892427
>>892399
> 2016
> lisp
Lisp способен даже C++ оставить далеко позади в соревновании по написанию неподдерживаемого кода.
Аноним 11/12/16 Вск 16:57:04  892490
Screenshot at 2[...].png (32Кб, 686x260)
Просто оставлю это здесь.
Аноним 12/12/16 Пнд 04:02:19  892842
>>892317
Напейсал на цепепе.
0.45-0.55 с. на все тесты.

Кек.
Аноним 12/12/16 Пнд 08:50:35  892874
Screenshot at 2[...].png (17Кб, 829x630)
>>892842
Вот код
Аноним 12/12/16 Пнд 15:23:58  893032
>>892874
Ну молодец. Цель то была на хаскелле написать
Аноним 12/12/16 Пнд 15:34:10  893044
>>893032
уже написал >>892317
Аноним 12/12/16 Пнд 17:43:03  893122
hask.png (5Кб, 517x206)
>>893044
Трай зис. У меня на всех тестах достаточно быстро выполняется.
Аноним 12/12/16 Пнд 17:59:10  893132
>>893122
Скидывай сорцы уж. У меня OCR нет.
Аноним 12/12/16 Пнд 18:01:23  893134
>>893132
http://pastebin.com/MN5Dv17Q
Аноним 12/12/16 Пнд 18:01:52  893135
>>893122
Ну заранее могу пованговать. Твой вариант похож на мой код с массивами, только у тебя Map, т.е. доступ к элементам заведомо медленнее.
Аноним 12/12/16 Пнд 18:08:11  893139
>>893122
7.1-7.2 секунд
чуть быстрее чем >>891585
и медленнее массивов >>892317, как я и ванговал
Аноним 12/12/16 Пнд 18:13:32  893144
>>893135
Вот только например на 20 тесте твой массив будет иметь 100000 элеметов, а мой мап всего 2. Аналогично на других тестах, мап будет содержать не так много элементов, как кажется - только для уникальных узлов
Аноним 12/12/16 Пнд 18:18:08  893152
Вообще в IRC мне посоветовали STUArray заменить на https://hackage.haskell.org/package/vector

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

Как мне кажется, отчего Хаксель больше страдает, это от переупаковок данных туда-сюда. Из строки в список чисел, из списка чисел в массив, анбоксинг, боксинг Int-ов, опять превращение в список и т.д. Создание списка для mapM_, только для того, чтобы вызвать функцию для каждого номера вершины.
Аноним 12/12/16 Пнд 18:20:44  893157
>>893144
>Вот только например на 20 тесте твой массив будет иметь 100000 элеметов, а мой мап всего 2.
И всё равно работает медленнее.

Array выделяется 1 раз и хранит unboxed Int-ы (если это STUArray/IOUArray; U = Unboxed). А Map зделан поверх дерева, при доступе и добавлении куча сравнений и хождения по указателям.
Аноним 12/12/16 Пнд 18:33:01  893171
>>893144
Как-то странно экономить память на массиве, когда создаётся несколько списков, длина которых линейна от числа вершин.
Аноним 12/12/16 Пнд 18:56:15  893181
>>893152
>Как мне кажется, отчего Хаксель больше страдает, это от переупаковок данных туда-сюда.
Хотя нет, даже не от этого. От нестрогости. Для того, чтобы найти высоту дерева, нужно узнать высоты ВСЕХ поддеревьев. Т.е. задача сама по себе "энергичная". И нестрогий язык заведомо проиграет, т.к. будет бесполезно тратить время на создание thunk-ов, которые всё равно все будут вычислены.
Аноним 12/12/16 Пнд 19:33:18  893195
>>893181
BangPatterns же должны от этого спасать?
Аноним 12/12/16 Пнд 19:47:45  893203
>>893157
Ладно, уговорил. Давай так тогда
http://pastebin.com/q03JXZ19

Аноним 12/12/16 Пнд 20:11:51  893214
>>893203
Ошибся. Вот так правильно
http://pastebin.com/yRkPrQqr
Аноним 12/12/16 Пнд 21:42:08  893262
>>893214
Вау, всего лишь в 10 раз медленнее лиспа.
Аноним 12/12/16 Пнд 23:12:10  893299
>>893262
Пруф?
Аноним 12/12/16 Пнд 23:40:22  893318
ghc.png (39Кб, 944x445)
sbcl.png (46Кб, 964x477)
>>893299
А ты сомневаешься что ли?
Аноним 13/12/16 Втр 00:16:52  893335
>>893318
Хм, то есть вариант с асс. массивом за 7.1-7.2 сек отрабатывал, а вариант с линейным массивом за 30?
Аноним 13/12/16 Втр 00:20:18  893337
>>893335
У того анона эвм явно помощнее была.
Аноним 13/12/16 Втр 00:25:52  893340
>>893335
Эта версия >>893134 у меня за 52.7сек отрабатывает.
Аноним 13/12/16 Втр 00:27:05  893341
>>893337
А я то думал ты он и есть. Вообще надо на Unboxеd массивы переписать, они побыстрее должны быть.
Аноним 13/12/16 Втр 00:30:12  893342
>>893340
Ну тащемта выигрыш от массивов все-таки есть. И че там на лиспе получилось?
Аноним 13/12/16 Втр 00:49:39  893356
>>893342
http://paste.lisp.org/display/333925
Аноним 13/12/16 Втр 01:08:10  893359
>>893356
>)))))))
Слишком экстремально для меня.
Аноним 13/12/16 Втр 02:20:26  893389
haskell.png (15Кб, 501x162)
>>893359
Зато более практичный и удобный для разработки.
Хаскел же годится только для изъебств типа пикрелейтед.
Аноним 13/12/16 Втр 04:15:37  893405
>>893335
Он явно не включал оптимизации.
Аноним 13/12/16 Втр 04:16:25  893406
>>893262
Если даже медленнее питухона, то явно медленнее лишпа. Никто не сомневался.
Аноним 13/12/16 Втр 04:16:45  893407
>>893356
>>892427
Аноним 13/12/16 Втр 04:32:59  893410
>>893405
Ты явно не смотрел скриншот.
Аноним 13/12/16 Втр 04:38:36  893411
>>893410
kk
Значит показал не весь код на лишпе. Наверняка там в первой строке (declaim (optimize (speed 3) (safety 0) (debug 0)))
Аноним 13/12/16 Втр 04:40:16  893412
>>893318
Замерь цепепе у себя
https://cpy.pt/m4QQ7S8W
Аноним 13/12/16 Втр 04:57:56  893413
cpp.png (37Кб, 954x419)
>>893411
Весь. declare было в tree-height, но оно даёт ускорения на ~0.2-0.3сек, поэтому и убрал
>>893412
Аноним 13/12/16 Втр 05:00:47  893415
>>893413
Что у тебя за спеки, если всё так тормозит?
Аноним 13/12/16 Втр 05:01:38  893416
>>893415
атом, которому уже почти с десяток лет
Аноним 13/12/16 Втр 05:06:57  893417
>>893416
Ну, в принципе, отношение скоростей кода на Haskell к коду на C++ у тебя более-менее близко к моему.
Аноним 13/12/16 Втр 06:15:26  893424
>>893262
>Вау, всего лишь в 10 раз медленнее лиспа.
Ты, конечно, сравнил.
Haskell функциональный, Lisp императивный.
Аноним 13/12/16 Втр 08:07:58  893449
Хули не перекатываетесь?
Аноним 13/12/16 Втр 08:34:40  893459
>>893449
Лень.
Аноним 13/12/16 Втр 10:11:35  893491
>>893459
Пидоры.
Аноним 14/12/16 Срд 00:18:11  893911
>>893424
Во-первых, не императивный, а мультипарадигменный, во-вторых, дело не в этом.
Аноним 14/12/16 Срд 00:18:29  893912
>>893449
Сам и перекати
Аноним 14/12/16 Срд 05:48:15  894014
>>893911
Главное, что не функциональный.
http://lispnik.livejournal.com/130098.html?thread=398898#t398898
Аноним 14/12/16 Срд 08:26:30  894025
>>893912
Я не оп же.
Аноним 15/12/16 Чтв 09:38:53  894549
>>894025
Перекатишь — станешь.
Аноним 15/12/16 Чтв 15:28:07  894699
>>894549
Я боюсь. Вдруг накосячу.
Аноним 15/12/16 Чтв 17:25:44  894784
>>894014
Не __чисто__функциональный. Чуешь разницу?
Аноним 15/12/16 Чтв 18:39:26  894822
>>894784
Под не __чисто__ функциональный можно подвести что угодно.
Аноним 15/12/16 Чтв 19:13:08  894833
>>894822
Все не __чисто__ функциональные языки являются __чисто__ мультипарадигменными
Аноним 15/12/16 Чтв 19:48:06  894857
>>894833
>мультипарадигменными
Ничего не значащий баззворд. Типа "гибридное ядро" и т.п.
PEREKOT Perekoter !JLHGEtxGTk 15/12/16 Чтв 20:29:28  894905
ПЕРЕКОТ в тред >>894904 (OP)

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 559 | 57 | 121
Назад Вверх Каталог Обновить

Топ тредов
Избранное