Функциональное программированиеКнигиTypes and Programming Languages ru: http://rgho.st/79l9wvVcQ en: http://rgho.st/8tSBffPsHStructure and Interpretation of Computer Programs ru: http://rgho.st/8MgrHrCcc en: http://web.mit.edu/alexmv/6.037/sicp.pdfIntroduction to Functional Programming ru: http://rgho.st/7mf8HCkmxHaskellhttps://hackage.haskell.org/https://wiki.haskell.org/Haskellhttps://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.htmlBeginning Haskell en: http://rgho.st/8pG4TYdnpClojurehttp://clojure.org/http://clojurescript.org/http://www.learn-clojure.com/http://www.braveclojure.com/https://youtube.com/user/ClojureTVhttps://clojuregazette.com/КнигиClojure Programming http://rgho.st/7wGxqJj54The Joy of Clojure http://rgho.st/6dyRBG9rgOCamlhttp://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/
To do list: >>873057
Кложура же в лиспотреде обсуждается, в верблюд не нужен никому, просто Хачкиль-тред сделал бы.
>>875645Да ладно тебе, здесь же по идее обсуждают особенности функциАнальной парадигмы. Существуют различные функциональны языки для веба(elm, purescript). не вижу ничего плохого в обсуждении clojure и здесь. более того, можно обсуждать фп фичи в мейнстримных языках(c#, js..). нутыпонял
>>875645Еще к бамплимиту прошлого треда определились же, что самые обсуждаемые языки в треде - хаскель и кложурь. Кложурь настолько же лисп, насколько и то, что обычно называют "фп". А без эм-эля фп-тред пилить... как-то совсем странно. Так что все норм. К тому же тут общие вопросы можно обсуждать, а в треде про хачкель это бы странно смотрелось. Короче - все ок.
Сами книги на рыгхосте зачем?>>875645Это.
>>875653>определились>самые обсуждаемые языки в треде>кложурьСам же зафорсил в прошлом треде, сам же определился и сам же перекатил. Браво! 10 хитрых планов из 10.
двачую за кложурь, она тут нужна. Единственный нормальный функциональный лисп.
Beginning HaskellБрал вот здесьhttp://wayupload.com/pfsydsj2jlk7.html
>>875668>Единственный нормальный функциональный лисп. Ну а как же жаваскрипт?! Мммм? Давайте и его в шапку добавим.
>>875678>Инжиниринг магазинаЧто, простите?
Поясните за котлин. Кроме андроеда - никуда?
>>875662Таблетки прими, поехавший.
>>875755Ненужно. Вся суть котлина - это нескучные обои. Вообще, не рекомендую обращать внимания на языки, за которыми не стоит академического рисёрча или крупной корпорации.
>>875730На протяжении всей книги ты как-бы делаешь на Хаскеле интернет-магазин, продающий машины времени.
>>875637 (OP)Аноны, подскажите что - нибудь почитать про фп. Не про синтакс отдельного языка, а чтобы вообще в целом и желательно на английском языке.
>>875776>2016 >Хаскель IRL никому не нужен>Используя машины времени перенесемся на 20 лет вперед и увидим, что функциональное программирование победило!>2036>Человечество уничтожено роботами>Их ИИ написан на Javascript>FUUUUUUUUUUUUUU
>>875781-> >>873057Начни с введения в фп Харриса: http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/Или sicp. У тебя какой уровень примерно?
Думаю, будет полезно добавить этих ссылок на видео...https://www.youtube.com/playlist?list=PLbgaMIhjbmEm_51-HWv9BQUXcmHYtl4swhttps://www.youtube.com/playlist?list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_
>>875637 (OP)Чё такое лямбда?
>>875872Ононимнайа функцейа
>>875645У верблюда больше применений в реальном мире, чем у хаскелля, с чего это он вдруг стал не нужен?Благодаря фейсбуку скоро и фронтендеры на окамледиалект переходить начнут.
>>875872>Чё такое лямбда?Буква греческого алфавита.>>875872>Ононимнайа функцейаЭто вам большие знатоки ФП на джаве рассказали?
>>875883А без талмуда теории по лямдбда калькулусу это как-то ещё описывается на языке простолюдинов? Посвяти уж.
>>875885Ещё раз, λ - буква греческого алфавита. Без талмуда
>>875885Какой такой талмуд? В том же TaPL на весь нетипизированный лямбда калкулус страниц 20 наверное отводится.Лямбда — это буква. Если тебе интересно, что такое лямбда-терм — так и спрашивай. Но в этом случае я отправлю тебя читать TaPL
>>875889>Какой такой талмуд?Барендрегт.
>>875890Это для задротов PLT-теоретиков и математиков. Для software engineer'ов, коими в основном являются адепты ФП, такое чтиво бесполезно.
>>875891> определение из javы для software enineerов не нравится> литература для задротов не нравитсяопределись уже
>>875873Типо как в JS () => {return "блядь";}?
>>875657Ну и что ты этим хотел сказать?
>>875637 (OP)Что скажете об этой https://www.ohaskell.guide/pdf/ohaskell.pdf книге? Алсо залил >>875678 на рыгост http://rgho.st/6gSbS8pGz
>>875661> Сами книги на рыгхосте зачем?Тому что удобно
>>875973Для тех, кто совсем не знаком с программированием или знаком очень поверхностно.
>>875974Зато курировать это затрахаешься.Смысл делать из сосача флибусту?
>>875639>надо добавить книжки, переведенные нашим русско...Пиздец говноедство!
>>876021Специально для тебя я добавил в шапку английские версии книг
>>875867Был бы я тян, я бы хотел, чтобыьон меня удочерил и выебал. Вадлер ван лав! Гив ит ап фор ве лямбдамен!
>>875937Почти.
>>876021Дебил, наше комьюнити перевело несколько самых мастрид книг по цс. Никто не заставляет тебя читать их на русском - просто это отличный список чтения.Алсо, детектирую в тебе школьника, русофоба и латентного ватника.
>>876021Вот и объективные мнения подъехали...
>>875821Уровень джава макаки. Рекурсии последний раз писал в универе на лабах.
>>876167А интерес теоретический (узнать, откуда все берется и как оно работает) или практический (начать писать более лучший код)?Мне кажется, тебе больше подойдет или sicp, или htdp. Но второй совсем для начинающих, тебе будет скучно, наверное. Так что да, наверное лучше sicp. Писать можешь в plt racket, он сразу идет с простенькой, но удобной ide, зиро конфигурейшен.
>>876182Посмотреть с функциональной стороны на код, что-то новое открыть для себя, ну и в планах перекат на эрланг или хаскель.
>>876191Ну дак вкатывайся сразу в хаскель.
>>876208"Cразу в хаскель" - совет уровня /б.))Вкатываться буду в то, что будет популярным и востребованным.
>>876238У тебя есть гарантии, что хотя бы один фп язык станет мейнстримным? 10 лет назад никто не вспоминал про ФП, потом функциональные фичи начали добавлять в популярные языки. Нет уверенности, что нынешний интерес не угаснет. Я начал изучать ФП с хаскелля и тебе советую, в любом случае потом будет легче выучить любой функциональный язык. Если тебя интересуют карьерные возможности, то лучше либо закрыть этот тред, либо учить скалу, хоть это и мультипарадигменный язык и он тебе не даст той базы фп, которую мог бы дать хаск.
>>876238> что будет популярным и востребованнымТогда что ты здесь делаешь? Хаскель никогда не будет популярным и востребованным. Если ты действительно хочешь "популярный и востребованный" язык, то тебе в питон/пхп/жс/жаба-тред
>>876258Спасибо, сейчас мне твой ответ показался более убедительным.
>>876258>учить скалу Языки смысла нет "учить". Синтаксис отдельного языка при некотором опыте осваивается быстро. По хорошему учат сами модели в общем и как оно работает. Но раз на Хаскеле легко понять всю функциональную кухню, то возьмусь за него.
>>876238неверно. ФП вообще сейчас в принципе не очень востребован, понимать его есть смысл лишь для "изменения чего-то в мозгу", чтобы применять это в других языках (тот же redux в жсе). Тут можно и сразу хаскель, ибо с ним это "изменение" произойдет максимально быстро. А после уже пиши на любом языке, каком хочешь.
>>875880фронтендер на clojure, заинтересовал синтаксис этого reason. Но по нем очень мало инфы. Меня, например, интересует интероп с js-ом. Есть какая информация? Или он еще WIP (коммиты не самые активные)?
>>876333>Easy to use js_of_ocaml integration.>Compiler from OCaml to Javascript.
>>876258Я бы советовал скалу тем кто уже работает с джавой (именно работает, а не просто знает). Изучать по отличной книге https://www.manning.com/books/functional-programming-in-scala. Не уверен что у неё есть аналог для хаскеля. Из-за FPiS я даже иногда думаю что скала может быть первым ФЯП, но на работе убеждаюсь в обратном.
>>876393Чем она плоха?
>>875880>Благодаря фейсбукуФєйсбук юзает Haskell
>>876455https://facebook.github.io/reason/
>>876455Т.е. https://github.com/facebook/pfff
>>876470>>876466https://www.youtube.com/watch?v=sl2zo7tzrO8
>>876481Я где-то отрицал, что он юзает haskel?
Почему про зависимые типы и пруверы ничего в шапке нет?
>>876559>пруверы
>>876409Это гибридный язык, изначально не предназначеный не для pure functional programming, а для взаимодействия с джавовой экосистемой. Из чего вытекает переусложненный (для ФП) синтаксис, сложная система типов, отсутсвиве контроля над эффектами и стандартных тайпклассов в стандартной библиотеке.Подробнее: https://www.reddit.com/r/haskell/comments/1pjjy5/odersky_the_trouble_with_types_strange_loop_2013/cd3bgcu/
Аононы, такой вопросик. Допустим надо разбить стрку произвольной длины на список строк фиксированной длины. Решение в лоб, которое я вижу - рекурсивно перебирать элементы строки и инкрементировать счетчик, счетчик достиг порога - добавляем строку в список, не достиг - делаем конкатинацию. Но как мне кажется решение по производительности не не очень оптимальное. Вот объясните, как можно решить задачу боле оптимальным способом, и какой у вас ход мыслей был при поиске решения. Хотелось бы в целом понять, разницу в мышлении функциональщика и императивщика. Я вот будучи закостенелым императивщиком привел решение скорее таки в императивном стиле.
chunk _ [] = []chunk n list = chunked ++ chunk n dropped where chunked = take n list; dropped = drop n listКак-то так, наверно, не проверял. В общем без счётчика можно обойтись, я думаю.Вообще есть функция chunksOf :: Int -> [e] -> [[e]]
>>876631выше уже кинули решение в принципе
>>876652>>876666Ок, спасибо. Я вот стал смотреть функции для работы со списками, а почему вы решили использовать take\drop, а не splitAt, например?
>>876670take\drop как-то в первую очередь приходят в голову.>>876666Лол, честно не видел.
>>876675> Лол, честно не видел.это я к тому, что мое решение дублировало то, что выше) Но решение выше моего скрина не совсем верное из-за ++ вместо :> Ок, спасибо. Я вот стал смотреть функции для работы со списками, а почему вы решили использовать take\drop, а не splitAt, например?splitAt использовать конечно лучше. Другое дело, что take/drop - частоиспользуемые функции в разных ФЯП, а вот про splitAt я как не хаскельщик вообще не знал
Подскажите еще пожалуйста, мы же можем >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
>>876770нет> where chunk = take nозначает, что в chunk - функция [a] -> [a]. И вот ты склеиваешь эту функцию с (chunks n rest), где ты передаешь в chunks другую функцию [a] -> [a] (из rest). Возможно, такое можно как-то сделать через композицию, но имхо все усугубляет читаемость кода
Еще такой вопросик. Я применяю функцию к аргументу типа с достаточно большим количеством именованных полей. Вот собственно как мне добраться до значения каждого поля? Типо только так?myf (MyType {field1 = f1, field2 = f2}) = MyType {field1 = f1 + f2, field2 = f2 + f1}Тогда получится, я больше развертку field1 = f1, field2 = f2, ... буду описывать, чем логику самой фукнции. Есть способ как-то это дело сократить?
Здесь есть люди, которым нечем заняться и они готовы слушать мои метафизические маняидеи в попытке создания ИИ?
>>877372Да
>>877372да
>>877372Да, я только ради этого и держу этот тред в закладках
>>877459>>877460>>877462И Вы будете помогать мне ради всеобщей цели всего человечества?
>>877512Давай рассказывай уже
>>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Еще как-то полезно бы где-то найти различные ментальные модели в различных ситуациях. Что-то вроде, ты знаешь, что такое биологическая эволюция, значит можешь и представить себе, что такое эволюция звезды.Про зеркальные нейроны я сейчас изучаю. Но первое, что пришло в голову это посмотреть конструкцию термоядерной бомбы и как там зеркало помогает фокусировать. Ну, и совсем очевидные, хоть и вряд-ли правильные это зеркала для комнаты смеха, механизм проецирования. А дальше уже строить линзы, очевидно же. Хотя это просто, скорее, принцип фонаря или как там, то есть куда проще, туда и идти. Была вроде доля шутки, где алкоголик не хотел искать кольцо, там где не было фонаря, ибо там темно. Да-да, очень смешно, ага-ага.Кстати, на днях пришла мысль о распознавании изображений. Применять туда фрактальное сжатие. Патенты на алгоритмы уже истекли. А ранги фрактального сжатия довольно неплохо по мне подходят для многослойного распознавания.Впрочем, я довольно таки недавно ударился головой, да и я теоретик-хеллоувордщик, так, что пожалуйста не бейте сильно. Даже может бы книжку какую-то умную дали. Большинство людей говорит, что то, что я пишу это шизофазия.
>>877557Кстати, я думаю, что есть некий круговорот информации в природе. То есть, как круговорот воды, но информации.
>>877557>Даже может бы книжку какую-то умную дали. В ОП-посте в принципе список книг есть, можешь начать с "Learn You a Haskell for Great Good". Очень неплохая книга для новичка.
>>877557>Я думаю, что связи между нейронами в мозгу можно представить как грибницу. https://core.ac.uk/download/pdf/6117416.pdf здесь есть математическая модель развития мицелия. В купе с импульсными нейронными сетями это должно что-то дать по моему. Грибница разума.У грибов нет подразделения клеток на рецепторные или мышечные и т.д. Математическая модель роста гриба обеспечивает ему лишь равномерное распространение тела в гумусе, для лучшего поиска питательного вещества. Это мог бы быть и фрактал, если бы шанс нахождения питательных вещест был больше.На самом деле можно было бы построить нейронную модель ленточного червя, ибо они пиздец какие протые и пиздец как хорошо изучены и пытаться модернизировать как-то.>Про зеркальные нейроны я сейчас изучаю. Но первое, что пришло в голову это посмотреть конструкцию термоядерной бомбы и как там зеркало помогает фокусировать. Ну, и совсем очевидные, хоть и вряд-ли правильные это зеркала для комнаты смеха, механизм проецирования.Зеркала == отражатели. Типо испускаемую энергию направлять обратно, типо для "самовозгарания", йопта.
У меня бэкграунд джавовский, сейчас полгода пишу на скале и пытаюсь перестроить голову на фп. И вот я не понимаю, как классическую схему с контроллерами, сервисами и репозиториями перенести на фп.Предположим у нас есть контроллер, который вызывает сервис, который делает какую-то логику, сохраняет сущность в репозиторий, генерирует ивент, отсылает письмо на почту. Т.е. делает три сайдэффекта. Сайдэффектами мы с помощью монад управляем. Ок, но у меня монады же разные. Типа DbMonad, EmailMonad, еще какая-нибудь монада.Видел варианты решения с трансформированием монад, вариант возвращать функцию, а не монаду и где-то на самом верху эту функцию вызывать. Но если у меня монады не могут трансформироваться одна в другую? В скале в принципе все к фьючур трансформировать можно так или иначе, но если я не хочу фьючур. Или, если лямбды возвращать, то в итоге нехуевый такой граф зависимостей для лямбды наверху может получиться, что не есть гуд.В ооп все просто было - заинжектил зависимость и хуяришь, а тут пока все способы не выглядят многообещающе. Есть что почитать, посмотреть на эту тему?
>>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Последнее видео вообще хорошо показывает чем хорошо ФП.
>>877760Благодарю
>>877760По второй теме: http://www.cakesolutions.net/teamblogs/2011/12/15/dependency-injection-vs-cake-pattern
Есть два типа заявок - Active и Backup. Есть очередь, в которую можно закидывать заявки в произвольном порядке, но извелкать из очереди нужно либо заявки типа Active, в той последовательности, в которой они приходили, либо заявки Backup, в той последовательности, в которой они приходили, либо независимо от типа заявки, но опять же в той последовательности, в которй они приходили. Делаю типо очередь элементов, каждый из которых содержит очередь заявок типа Active и следующий элемент, который содержит очередь заявок типа Backup и следующий элемент, который содержит и т.д. При добавлении допустим заявки типа Active - "проваливаемся" в самый последний элемент с заявками типа Active и добавляем заявку в очередь. При извлечении допустим заявки типа Backup - "проваливаемся" в первый элемент с заявками типа Backup и извлекаем заявку из очереди. Получается как-то так, ("проваливаемся" в последний элемент с заданным типом заявок):data RequetsType = Active | Backupdata QQueue a = Nil | QQueue RequetsType [a] (QQueue a)qlast :: RequetsType -> QQueue a -> QQueue aqlast Active z@(QQueue Active q Nil) = zqlast Backup z@(QQueue Backup q Nil) = zqlast Active z@(QQueue Active q (QQueue Backup q1 Nil)) = zqlast Backup z@(QQueue Backup q (QQueue Active q1 Nil)) = zqlast Active (QQueue _ _ qq) = qlast Active qqqlast Backup (QQueue _ _ qq) = qlast Backup qqЯ совсем наркоман или норм? Может конечно есть готовые контейнеры под задачу, но вот так навскидку не нашел.
Блядь, зачем фейсбук пилит reason? Я только-только освоился с пюрэхаскеллями, до меня наконец-то дошла прелесть контроля эффектов — но из-за появления reason я не знаю, куда прикладывать усилия.С одной стороны, сложная йоба, которая компилируется только в ЖС. Но с сайд-эффектами, нормальной do-нотацией и в более-менее стабильном состоянии.С другой стороны более простая йоба, которая компилируется в ЖС и ОКамл, к тому же развивается книгой. Но еще WIP, без чистоты, с прилепленной сбоку пародией на do-нотацию. И как там дела с квикчеком/генеративными тестами?Я в лимбе, блядь. Тру-ФП уже готово для веба, но пока не ясно, какое из них брать.Анон, куда сам сядешь, куда SPJ посадишь?
>>876666Два прохода по списку, ну-ну.
>>877950Учитывая, что лицорукакнига набрала команду компилер-девелоперов (которые и пилят всю эту йобу) только из-за того, что не хотела уволнять пхп-девелоперов, логично предположить, что ризон она пилит по той же причине. Короче, я бы подождал пару лет минимум.Алсо, как у него с интеропом?Через десять лет слова "мл-лайк лангуаж" будут вызывать те же чувства, что сейчас вызывают "си-лайк лангуаж".
>>877988>только из-за того, что не хотела уволнять пхп-девелоперовВ этом есть что-то плохое? Девелоперов сохранили, да и сам пхп стал лучше, чем 5 лет назад в том числе благодаря книге — сплошной шин же.>Алсо, как у него с интеропом?На одном уровне с пюрэ. Разве что с документацией BuckleScript придется чуть-чуть ознакомиться.>external now : unit => int = "Date.now" [@@bs.val];И кроме всего прочего, в ризон уже реализовали JSX. Если бы JSX и встроенные опциональные аргументы был в пюрэ — я бы даже не задумывался о выборе языка, а то читать списки списков как-то все не привыкну.
>>877988>Алсо, как у него с интеропом?Оно компилируется в обжектив верблюда, у которого есть компиляторы в жс, жяву, натив и собственный байткод.Нутыпонел.>мл-лайк лангуажА что не так-то? Прекрасный синтаксис. Хочешь фичастости — всякие GADT и модули пофичастее чем в хаскеле, хочешь быстрый код — пиши циклы с указателями.
>>875637 (OP)Аноны, что там сейчас из библиотек/фреймворков хаскеля для GUI используют? Или это моветон писать такое на нем?
>>878002>это моветонЭто. На хачкелле можно писать только кластеры метапарадигм.Если по теме — https://wiki.haskell.org/Applications_and_libraries/GUI_librariesЕсли хочешь имхоты — возьми WPF, там даже F# есть (мл-потобная залупка, хоть и с уклоном больше в сторону ооп) и наслаждайся жизнью.
>>877995> шин жеШин-то может и шин, но от компании, которая переписывает компилятор языка из-за того, что у них сайт на этом языке тормозит, можно ожидать чего угодно. Сегодня пилят, завтра не пилят. Ненадежно.>>877997Вейт, вот? Даже так? В жс через окамл? По-моему это все игрушки и ненужно короче, с ффи заебетесь.Я не про синтаксис, а про то, что сейчас ПАТТЕРНЬ МЯЧИНГ и ТИИИПЫЫЫЫ - это модно, и языки штампуются (и будут штамповаться) бездумно и безыдейно, а через десять лет всю эту кучу говна придется разгребать. В этом смысле хачкель ничем не лучше крестов или джавы.
>>878016>Сегодня пилят, завтра не пилят. Ненадежно.Да похуй абсолютно, лол.Во-первых — там весь проект состоит из замены кейвордов и различных скобочек с символами на окамловские. Даже если что-то поломается - проект небольшой, исправить не сложно.Во-вторых — у тебя конечно сплошной фейсбук, который однажды переписав на новый модный и красивый язык/фреймворк - и все, пиздец.>с ффи заебетесьНу всякие скалажс и кложаскрипты живут же.>это модно, и языки штампуются (и будут штамповаться) бездумно и безыдейноДо этого было то же самое — все копаются в жяве и крестах и живы, здоровы хотя про здоровье не факт, лол.>хачкель ничем не лучше крестов или джавыПо такой логике вообще все языки говно и нахуй вообще жить - через десяток лет устареем и станем легаси на свалке исторри.
>>878023> вообще все языки говноА ты понял суть
>>877689Так и цифровые нейросети рецепторы воспринимают дискретно, проходя через АЦП. К слову, мицелий все-равно может чувствовать боль, в том смысле, что реагировать. То есть, восстанавливаться после некоторых разрушений, хоть и не как нервная сеть и не всегда. Впрочем, думаю, что добавить некоторые чувствительные конечности в цифровом виде было бы не слишком сложно. А затем модулировать и передавать по нитям. Впрочем, вряд-ли я сказал что-то нормальное. А мышечные, тут надо подумать. Судя по всему для мицелия нужны некоторые санитары, прочищать забитые пути, старые стереотипные... Нет, усложнение. Я пытаюсь достичь в этом плане некоя вибрация нитей, мозги кипят, путь на стороне листа понятен.>Математическая модель роста гриба обеспечивает ему лишь равномерное распространение тела в гумусе, для лучшего поиска питательного вещества. Это мог бы быть и фрактал, если бы шанс нахождения питательных вещест был больше.А разве нейроны в человеческом мозгу не есть на некой нейроглии, которая и питает ее? Взять вместо нейроглии некий гумус. Или это совсем бред, как и все остальное? Фракталы вроде бы даже и не есть каким-то противоречием, скорее всего http://studopedia.org/4-153326.htmlВпрочем, думаю, что фрактал нужно представлять и мыслить фракталами уже уровне чуть выше за этот. Но не слишком и высоко, конечно. К примеру, как некая мозаика даже. То есть, если отдельно нейрон может распознавать символ, то кому это интересно? Но если сам по себе нейрон ничто, но собираясь в группы, но самостоятельно, а не жестко. Я уже писал о фрактальном сжатии изображений. Да сети Кохоненна, но все-же это не то, что требуется.Я, кстати, сейчас пытаюсь изучать формирование нервной системы в состоянии эмбриона и кажется, что это опять подходит под грибы. Но в этом случае под грибок. Такие пузыри на грыбке. Интересно, есть ли математическая модель развития грибка на различных животных. Кстати, посмотри вот http://elibrary.ru/item.asp?id=22134417На основании полученных результатов, установлена биологическая ценность активных пептидов гидролизатов коллагена чешуи и.рациональность их сочетания с пчелиной пыльцой. Предложен состав гейнера для спортивного питания, обоснованы рекомендации по его применению. Забавно, не так ли? При чем тут спортивное питание? Ну, чуть синкретизации и ты войдешь в мой ход мыслей. Но и я хотел бы почерпнуть твои ментальные модели. Например, как ты в голове держишь последовательность целых чисел, десятичных и так далее. Используешь ли ты мнемотехники и так далее. Мне плохо в этом понимании. Я целый день хожу как овощ, думал, что ответить тебе, но сейчас мне ударил мощный импульс и мысли, ассоциации довольно странные, остальное, хлынуло-подпрыгнуло в голову. Вспоминается тот странный парень по имени, что-ли, Иешуа из Кин-дза-дза.Расскажи, пожалуйста, о ленточных червях. Очень интересно, как я понимаю это не те ребята, то есть, грибы что ими занимаются проектом OpenWorm? У них вроде червь нематода. В чем преимущество ленточных червей в этом плане перед червяком нематоды?Да, с зеркалами вообще тупо. Собственно, может даже скорей и именно линзы. Но отражатели, сразу вспоминаешь Алису в стране чудес. Такой себе, тоже процесс мыслей можно проследить и своебразная страннаяэмпатия нового уровня. Тут может даже нужны и зеркальные пазлы с 4D-печатью и даже больше измерений, лол.Шучу. Но зеркальные нейроны довольно хорошая вещь.Я вообще не понимаю, что со мной делается. Мышление стало каким-то импульсивным и очень переносится на бессознательное. Я могу слушать незнакомый текст на не знакомом языке по незнакомой теме и включая у себя пластинку начинать его и ее понимать. Такая фоносемантика, теория очевидностей, как я уже говорил. Я думаю, что ИИ, как уже говорил, должен применять во многом бессознательное, как сознательное. То есть даже применять когнитивные искажения. Я довольно много манипулировал людьми и осознал, что во многом они даже сказанную мною мысль нечайно как-бы поза кадром будут воспринимать, как свою собственную. Не говоря уже об ожидаемости, но меня много иллюзии забавляют или мучают. Некая вешалка, сапог, одежда кажется сидящим человеком. Могу увидеть в скрепках и бумаге довольно детальную куклу. Еще постоянно эти оклики. Странные штуки. Боюсь сойти с ума, может я уже пишу бред, но врачи мне говорили, что я просто невротик. Не знаю зачем я это написал, может хотел высмеятся.
>>878049Забыл дописать, что дабы сойти с ума нужен ум. Да и самоорганизация невозможна без энтропии. Тут сразу вспоминается химический катализ и его связь с информатикой, то есть такая научная работа была на Киберленинке. Довольно таки популярное решение где-то в 60-х годах, но теперь нет. Да и пролог уже не очень используют.
>>876466Фу блядь. Reason - это такой тайпскрипт с очень хуёвым синтаксисом.
>>878056Лол.
В детстве какие-то странные информационные потоки вливались в меня. Я даже активно видел Дом 2 на украинском. В мой код, я начинаю замечать, записано выражение мамы о том, что надо сделать ритуал, если ты сказал что-то вроде "черт побери". Дабы черти покинули хату. А еще Кин-дза-дза, я помню с детства лишь тот кадр, где ведут парня в желтых штанах, которого я воспринял за Иисуса. Я смотрел сериал Универ и шоу долгоносиков. Первый я смотрел под влиянием своей двоюродной сестры, я делал на телефоне нокия сайт из таких рамок, разных линий _. Сайт для универа, папиных дочек да разные там эти, мне наверное нравилась сама картинка происходящего. А телепузиков я всегда боялся. Черный бумер, скрытые сигналы детей, которые хотят попробовать коноплю, но не знают про опиодные рецепторы и не могут ее достать. И когда я перевелся, почему? Я сам странно вел... девочка повела меня за какие-то кирпичи и захотела поцеловаться. Это было в первом классе, я ничего не понимал. Меня спрашивали кем я буду, каким военным, сказали сказать моряком. Учительница сказала мне так ответить, а потом это распостраняли. Но я не хотел быть военным. На детских фотографиях я был безчувственным и излишне над людьми, но когда я был возле растений я чувствовал себя радостным. Но возле дома напротив дедушки и бабушки росли грибы, я считал их вредными и уничтожил. Я даже уничтожил мицелий. Они больше не росли. Я уничтожал грибы, что росли на деревьях вверху такие большие, я не знаю деревья, их названий. Но зачем откопали елочку возле моего дома мама и отдала ее посадить возле церкви? Ее никто не подливал и она засохла. Она верила, что быть слишком выше дома это плохо.
>>878056Хуёво ты его родословную изучил особенно учитывая что напрямую в жс оно не компилится.
>>875637 (OP)каму нахуя нужна ваще функцинальное прогрммирование)) когда есь ламповая джава)ващи хаскели не для реального мира, то что там на хачкеле три.5 парсеркомпинатора написале не делаит его приготным для биснеза))окамл ваще наверно умирмима джава царина
>>878023> Да похуйНу блин, там кто-то выше по треду кричал аллилуйя, мол труфп ин да браузер - а на деле это какой-то ненужный кусок говна уровня детского конструктора.Твое "во-вторых" я вообще не понял, у тебя там предложение не согласовано - хуй знает, что ты сказать хотел, вот често, извини.Скалажс не живет. В кложурскрипте нет ффи, там изначально язык дизайнился с прицелом на симлесс интероп с хост-платформой.> До этого было то же самоеТхиз, я как раз об этом.> все языки говно и нахуй вообще житьВетс ма бой!На самом деле все языки хороши, пока занимают ту нишу, для которой они предназначались.
>>878016>переписывает компилятор языка из-за того, что у них сайт на этом языке тормозитРизон они пилят, потому что синтаксис им не нравится. То ли жабаскриптеры неосиливают писать -> вместо =>, то ли хрен его знает. Вот в этом случае лучше бы они действительно компилятор окамла переписали. Со всем тулингом. И библиотеками.
>>878242> Ризон они пилят, потому что синтаксис им не нравитсяВообще не понимаю этой хуйни. В эмелях же самых хуёвый синтаксис эвар, что-то типа паскаля, только всерьёз. Вот бля, я и джаваскриптовый синтаксис люблю, и хаскельный, и скальный (пока не начинается scalaz), но эмельный это же очевидная говнина говнин, просто ёбаный уродливый мусор, как его можно любить за что-либо? Он хуёвый, с какой стороны ни посмотри, что для писания, что для читания.
>>878264Если ты про смлный, то я с тобой согласен, хотя там всё не так плохо, как ты рисуешь. В окамле же всё заебись с синтаксисом. Разве что begin и end можно было заменить на фигурные скобочки, потому что писать лень, смотрится так себе, а обычные скобки хрен увидишь. Тут дело в том, что они в итоге сделали ещё хуже, чем было.
>>878267Бля, я в глаза проебался. В ризоне заебись синтаксис, это в окамле говно.Единственное что неоч - это лямбды:js: let f = x => y => x + yreason: let f = fun x => fun y => x + y
>>878276можно убрать лишний funlet add = fun a b => a + b;
Лямбда, тебе не надоело пропагандировать функциональщину?
>>878294не))
>>878242Ниасилили.>>878264В хаскеле мльный синтаксис как бы.
Вот нахуй хаскелл сделали с уебанским двумерным синтаксисом, идиотизм же.
>>878339> В хаскеле мльный синтаксис как бы.Лол, нет.>>878369Завидуй молча.
>>878392https://en.wikipedia.org/wiki/Miranda_(programming_language)>Influenced by ... ML ...
>>878392Хачкиль все относят к мл-семейству. Просто там сахарком посыпали, и стало не так похоже.
>>878397В эмелях нельзя сделать where, потому что порядок вычисления императивный.Некоторые учоные это считали настолько важным что даже писали про это статьи в духе "The next 700 programming languages":http://www.inf.ed.ac.uk/teaching/courses/epl/Landin66.pdf
>>878401> порядок вычисления императивный.думаю ты просто ошибся, но на всякий случай, энергичность вычислений != императивность
>>878401>В эмелях нельзя сделать whereДа как нефиг делать. Просто трансформируй в let первым проходом по аст. А если так хочется ленивости (или будут проблемы с перекрёстными дефинишонами), то всегда можно обернуть в функцию.
>>878404Здесь слово "императивный" лучше подходит. Суть в том, что стейтменты вычисляются друг за дружкой и биндинги - не исключения. Введение связывания/переменной - это стейтмент, который должен участвовать в этой императивной очереди выполнения строчек и должен предшествовать строчкам где это связывание будет использоваться. Эмели со своими let-ами здесь ничем не отличаются от сишек или джаваскриптов.
>>878408Ты просто задумайся о схеме такого преобразования.Например,f x = if x > 10 then y else zwherey = longComputation1z = longComputation2Будут ли леты перед if, или внутри then-else?А это только самый банальный пример, даже без сайдэффектов.
>>878410Куда-то не туда тебя несёт, по-моему. В том же хаскиле ты не можешь вычислить a + b не вычислив полностью всё, от чего зависят a и b. И вычисляться они будут ровно так же по очереди как и в мле.>>878412>Ты просто задумайся о схеме такого преобразования.Задумался, всё нормально.>Будут ли леты перед if, или внутри then-else?А это не важно. Во-первых, можно объявить where синтаксическим сахаром для let, а там пусть сами ебутся. Во-вторых, можно во время компиляции обернуть их в лямбду без (ок, с одним) аргументов и получить ту же самую семантику. Преобразование тривиальное, даже пандорический захват не надо делать.
>>878410Хаскельские let in и where это просто синтаксический сахар вместо подстановки значений в лямбду, это даже не биндинг.
>>878417> можно во время компиляции обернуть их в лямбду без (ок, с одним) аргументов и получить ту же самую семантику.Какую ту же самую, ты ебанутый?Если ты обернёшь их в санки, не мемоизирующие результат, ты получишь call-by-nameесли ты обернёшь их в санки, мемоизируищие результат, ты получишь call-by-need,как в хаскеле, только неоптимизированный.Вот так вот вводя "незначительный сахарок" ты незаметно сделал язык ленивым.>>878418Ты отвечаешь на пост в котором ничего не говорится про хаскельный let.В эмелях другой let, в котором синтаксическая позиция и порядок вычислений неразрывно связаны.
>>878421Я о том, что в хаскеле вообще нет биндинга, а если был бы, он бы работал так же само как и в мле, в котором он есть.
>>878428В широком смысле под биндингом понимают просто синтаксическое введение имени, независимо от того, во что оно там скомпилируется и как будет работать.
>>878401В эмелях можно сделать вхере.Более того, это не имеет никакого отношения к тому факту, что у хаскеля мл-лайк синтаксис. Вообще никакой связи.
>>878431Введение имени это определение лейбла указывающего на какие-то данные, а в хаскеле имя ни на что не указывает, это просто параметр выражения, оно не живёт само по себе, его нельзя отдельно определить.
>>878421> Какую ту же самую, ты ебанутый?> ты получишь call-by-need, как в хаскелеНу вы поняли, да.
>>878421>ты незаметно сделал язык ленивымНе язык, а одно выражение. И не сделал, а это всего лишь один из вариантов решения. Так-то в окамле есть lazy, он теперь ленивым языком становится что ли?
>>878439> нету where, какие-то ёбаные галочки в типах, одномерный синтаксис> есть where, двумерный, в синтаксисе нет вообще ничего похожего на эмельный> мл-лайк/0>>878444 > where - сахарок> ту же самую> подразумевал не эмельную/0>>878441Введение имени это лирика, а не физика, аутист.>>878450Ок, нормальное замечание.
>>878401В том же пюрэ есть where. Ленивость, порядок вычислений — все это не имеет значения, когда речь идет о сахарке. Как сахарок нужен — тот и можно сделать через ppx.
>>878466>Введение имени это лирика, а не физика, аутист.Не можешь отличить параметр выражения от лейбла? Совершенно разная семантика же. Можешь ты в хаскиле ввести имя отдельно от лямбды куда оно тут же будет подставлено? Не можешь. Ну значит это нихуя не введение имени.
>>878466Ладно, ты не знаком с историей создания хаскеля, не понимаешь, что тебе пишут и пытаешься толстить. По-моему все в треде это уже поняли, хватит это кормить.
>>878540В хаскеле синтаксис из миранды, а в миранде синтаксис из ISWIM. Корни более ранние чем первые эмели.
>>875657Штоэта блять?
>>877559Это как?
Как называется подмножество зависимых типов, которое гарантировано не требует вычислений в рантайме?
>>878794Зависимые типы, лол
>>878051>>878049>>878060Просто закинься кислым.
>>878049>>878060это писал один и тот же анон? если так то чувствую родную душу :3 скажи, анон, чем ты занимаешься в частности в треде по фп? не хочешь вместе поупарывать?
>>878794>гарантировано не требует вычислений в рантаймеХуй пойми, что ты тут имел в виду.Вычисления во время компиляции? Отсутствие информации о типах в скомпилированной программе? Последнее называется type erasure, если что.
>>877950>зачем фейсбук пилит reason?Хочет и пилит, в чем проблема? Он может это себе позволить.>Я только-только освоился с пюрэхаскеллями, до меня наконец-то дошла прелесть контроля эффектов — но из-за появления reason я не знаю, куда прикладывать усилия.ИМХО, ризон не дает ничего нового по сравнению ни с хаскелем, ни с пюрешкой, поэтому не нужен. Кроме того, сам по себе тезис "фейсбук разрабатывает ризон" совершенно не означает, что за этой командой стоит вся мощь фб. Это скорее инвестиции, как в случае с мозилловским растом. Выстрелит - окей, не выстрелит - тоже хуй с ним. А вот пюрешку клепают люди, у которых основной продукт на ней сделан. Причем в последнее время они зашевелились, фундепы добавили.Хаскель тут вообще немного в стороне - GHCJS завезли, хуле надо кроме того что когда в последний раз я на него смотрел, он был он тормознутый, жрал память как не в себя, да и хуй соберешь. А еще в итоге тащишь весь рантайм в браузер. Как там, кстати, не пофиксили его производительность?
>>879438>Это скорее инвестиции, как в случае с мозилловским растом. Выстрелит - окей, не выстрелит - тоже хуй с ним. Лол, нормальную ты так хуйню написал. Начиная с того что они его вполне целенаправленно разрабатывают, заканчивая тем что он привносит дохуя нового в байтопердолинг — по всем своим же пунктам обосрался.А вообще, я не понимаю что вы так прицепились к этому ризону — это даже не язык, а интерфейс к окамлу, как его называют сами разработчики. Хотели потыкать окамл но не нравились begin..end и звёздочки вместо скобочек с запятыми — ну потыкайте ризон, больше он не для чего не пригоден.
>>879470>это даже не язык, а интерфейс к окамлуТак это же чудесно. Вместо очередного нового языка, который хуй знает когда созреет, получаем все плюшки уже имеющегося старичка.>что вы так прицепились к этому ризонуРизон — это окамль с вебмакаковским человеческим лицом. Оксиген никому не был нужен. А реакт нужен всем. И хороший язык для реакта дает надежду на увеличение продуктивности работы.
>>877783Я бы не советовал использовать cake pattern, если ты совершенно четко не понимаешь какие плюсы и минусы он тебе даст по сравнению с конструкторами конкретно в твоём случае.
>>879507> Ризон — это окамль с человеческим лицом. Оксиген никому не был нужен. А реакт нужен всем. И хороший язык для реакта дает надежду на увеличение продуктивности работы.Чёто я нихуя не улавливаю твоей логики. Реакт - жс фреймворк написанный на жс, причём тут окамл?
>>879524Ты не в курсе, что ризон нацелен именно на жс-макак, и одним из его плюсов числится легкость взаимодействия с жс и генерация жс-кода, похожего на написанный вручную?Один из фейсбукокорейцев уже почти допилил типизированные биндинги ризона к реакту, в дискорде можешь все увидеть.
>>879536Бредятина какая-то. Скажи честно, ты видел тайпскрипт?Он от этого вашего ризона отличается вещами уровня "x => x + x" vs "fun x => x + x", причём не в пользу ризона.И для него тайпинги для всех сортов реактов и ридуксов уже давно написаны.
>>879557Ага, видел. И отсутствие non-nullable типов до второй версии видел. И отсутствие ADT вижу. И косяк с инвариантами вижу.Тайпскрипт — это жаба, натянутая на ЖС, а не полноценная система типов. Флоу и тот лучше.
>>879559> отсутствие ADThttps://www.typescriptlang.org/docs/handbook/advanced-types.htmlСм раздел "discriminated unions".А потом прочитай все разделы раньше и покажи в ризоне юнион типы и типы пересечения.
>>879564>А потом прочитай все разделы раньше и покажи в ризоне юнион типы и типы пересечения.Ты хоть страничку ризона открывал? Или код на кемле хоть раз видел?А вообще тот анон прав — тайпскрипт это какая-то ява с мл-ем.
>>879564>function isFish(pet: Fish | Bird): pet is Fish {> return (<Fish>pet).swim !== undefined;>}АХ ТЫ Ж ЕБАНЫЙ ТЫ НАХУЙ.ADT my ass.Химера из жабы, утки и верблюда. Мутабельная химера. Недоделанная химера.Не, лучше не посылай меня в документацию, а изучи ризон и/или окамль.
>>879570Ты же даже не знаешь, что такое типы объединения и типы пересечения.Я не буду копипастить тебе код со ссылки, не можешь открыть - твои проблемы.> изучи ризон и/или окамль.Я дрочил на модулефункторы ещё когда твой папаша ебал свою правую вместо твоей мамы,сейчас когда мне нужен параметризуемый модуль я просто пишу "module.exports = (param) => { ... }" и живу полноценной жизнью.
>>879587Быстро же ты со своей костыльной параши сманяврировал на модули.
>>879595Это не костыли, а остриё прогресса в мирке типизации. Я просто расширил круг претензий ещё и до модулей. Где-то там в 70х в языкострое было модно выдумывать синтетические абстракции и усиленно воевать с простотой и законами физики. Ни в коем случае нельзя реюзнуть обычные типы для модулей и делать параметризуемые модули обычными функциями, надо непременно придумать какие-нибудь сигнатуры, функторы, ебливую модель компиляции, чтоб пользователь языка не заскучал.
>>879434Ну, ты знаешь, что такое зависимые типы? Рантайм от компайлтайма отличаешь? В общем случае они требуют контроля типов в рантайме. Вот я и спрашиваю, как называется их подмножество, которое ничего не будет делать в рантайме.
Единственное чем привлекает этот ризон - возможностью писать компактные нативные программки на языке менее блевотном, чем все остальные с аналогичными свойствами.
>>879623Ты не путаешь зависимые типы и контракты? Завтипы, как и прочие типы статически-типизированных ЯП, проверяются в компайлтайме.
>>879627Таки да, в этом суть любого языка.
>>879623> как называется их подмножество, которое ничего не будет делать в рантайме.Гугли "proof irrelevance". >>879628> Завтипы, как и прочие типы статически-типизированных ЯП, проверяются в компайлтайме.Проверяется структура с точностью до индукции всякой, сами значения в типах в рантайме нужны, причём иногда даже для логики. Например, это совершенно нормально для языка с завтипами, распечатать размер, который хранится на тайплевеле, для списка, длина и содержимое которого определяется в рантайме.
>>879630Нет, на джаве или сишарпе или питоне или жс нельзя писать компактные нативные программки.Они все требуют рантайм, они все исполняются на VM. А ризон в этом плане как сишка или кресты:делаешь маленькие скоростные екзешники которым ничо не надо.
>>879640Спасибо, гуглю.
Посоны, можно как-нибудь дать синоним дата-конструктору?data Some = Foo String | OneИ нужно что-то вродеSynonim :: String -> SomeSynonim str = Foo str
>>880665И если что, я знаю что можно определить функциюsynonim :: String -> SomeНо мне нужно с аппер кейса прост.
Сап функциональщикиПодскажите пожалуйста что обмазать чтобы понять зависимые типы. type-driven development with idris кто-нибудь читал? Стоит ее покупать?Я знаю эрланг, кложу и хаскел и хочу понять в чем прикол зависимых типов, посмотрел пару видосов на ютубе про идрис от создателя идриса, выглядит круто. Но чувак просто показал как он делает что-то на идрисе, выглядит как черная магия. Может есть хорошие пейперы или книги где это все описано?
>>880665>>880666{-# LANGUAGE CPP #-}#define Synonim (Foo "Yoba")
>>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/ но там сложна, требуется уже какое-никакое понимание что вообще происходит.
>>880676>type-driven development with idris кто-нибудь читал?Она ещё не вышла.на сайте издателя значится как early accessавтор ещё не дописал её, значитно первые главы прочитать уже можно, если предзаказать печатную версию на сайте
>>880703Вроде как читал что все чептеры готовы.>>880691Добра тебе!
Хаскеляне, у меня допустим тип данных с большим количеством полей, а логику надо реализовать в зависимости от значения только одного из этих полей. Как в этом случае добраться до его значения без дикого патерн матчинга в видеfunc _ _ _ _ myfield _ _ _
>>880815юзать рекорды и линзы
>>880665Расскажешь, зачем тебе это? Синоним типу ты можешь определить, а конструкторы переименовывать... Что-то странное.
>>880691Съеби отсюдова.
>>880834ДЯдя, ты ахуел? Лижи мою залупку, шлюха.
>>880835Да ладно, не обижайся, я ж любя. Не дай бох засрешь и тут весь тред своими хаматопиями блждад ну нахуй
>>880665>>880666Почитай про PatternSynonyms. С ними можно сделать это как минимум для паттерн матчинга:pattern Yoba :: Somepattern Yoba <- Foo "Yoba"Но будет ли работать Yoba в обычном контексте вне матчинга - я хз, хаскеля под рукой нету, сам проверяй.
>>880836Так зависимые типы это обязательно жосткая абстрактная теоретическая наркомания, приземлённого ремесленнического там в принципе быть не может, потому что нужно оно для супер-пупер формально-даказанных прошивок ядерных ракет.
>>880843Да я не про это, лол, ладно.Ну и в скалке жи есь зависимые типы, так что никаких ракет, Е ФОР ЕНТЕРПРАЙС
>>880844Подмножество зависимых типов, которые есть в скалке, эмелях и тайпскрипте - это обычно не то, что имеют в виду, когда просят накидать литературы по зависимым типам.
>>880848> в скалке, эмелях и тайпскриптеАх да, забыл ещё C++ и D.
>>880848Ну ладно, идрис себч позиционирует как "прикладной" язык, так что все равно необязательно ракеты. Алсо, что ты имел в виду под зависимыми типами в мл? В депендент мл или в мл?
>>880851"Прикладной" язык Идрис - это как раз для ядерных ракет. А когда завтипочек говорит "неприкладной",он вообще имеет в виду использование для конструктивного доказательства математических теорем, а не для софта.
>>880833Прост хотел чтобы у конструкторов и прочего были как нормальные имена, так и односимвольные из блока юникода Mathematical Alphanumeric SymbolsКороч обычный Больше айдишники меняю и отступы выравниваю чем код пишу.
>>880851> что ты имел в виду под зависимыми типами в мл? В депендент мл или в мл?То же что и в скале имеют в виду под зависимыми типами - path dependent types.Они есть хоть в смл, хоть в окамл.А в депендент мл что-то куда более существенное, ближе к агдам.
>>880872>Короч обычный Тут должен был быть Аутизм во макаба не смогла.
>>880872Лол, как я тебя понимаю, бро. Как что-то плохое, кстати. Кто-то и пробелы должен расставлять!
Посоны, есть какая-нибудь простая GUI-библиотека для Хаскелля под винду? Для тех кто ТОЛЬКО УЧИТЬСЯ.Мне прост юникодный текст нужно выводить, а у терминала с этим проблемы. Ну ещё хотелось бы пару блоков с выводом текста, пару кнопочек и одну стороку для инпута.
>>881629Gtk + Glade, лови пример: https://github.com/apsk/memspacer-uiЗаодно сразу и template haskell макрос для подвязки к контролам по именам.
Ну ёбанный ж ты нахуй.Сам хачкель внутри себя держит чары в юникоде, но чтобы записать их в файл - нужно пердолиться.
>>881770Ты видишь мои посты? >>881670 >>880839
>>881670андрюша)
>>881771Я с кодировкой IO не мог разобраться, какой мне Gtk? Алсо, как паттерн-мячинг и фолды/мапы с конструкторами использовать? Пикрелейтед.
>>881810Что за цветовая тема. Очень надо, брат умирает от default theme/
>>881983так дефолтная же, One Dark, мимокрок
>>882083Но не в джетбрэйновких продуктах.Спасибо.
>>882095Так с самого начала было ясно что это атом, лелПалю годноту для идейки - https://github.com/ChrisRM/material-theme-jetbrains
SPJ со своим другом наконец-то разработали недостающую теорию,открывающую мир нешаблонного параметрического полиморфизма байтоёбским типам со стека:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/11/levity-1.pdf
>>875637 (OP)Э, ОП, вот такая книженция на инглише есть. Надо?>>882135А в идее или атоме билдинг настроить можно?
>>882218>А в идее или атоме билдинг настроить можно?Что ты под этим подразумеваешь? Собирать по кнопочке/клавише со своими скриптами? Да.
Начал вкатываться в хаскелл и застопорился на первой же задачке. Хочу для тренировки реализовать ориентированный граф и пару алгоритмов на нем, которые сейчас разрабатываю по работе на скале.В общем я не осилил как реализовать граф. В джаве он выглядит какclass Edge {Node source;Node dest;double weight;// еще всякие специальные значения}class Node {List<Edge> edges;// всякие спец параметры узла}Так вот, как мне такую структуру перенести в этот ваш хаскелль с его прекрасными адт на которые так все яростно надрачивают? Как определить дерево рекурсивно я понимаю. Но как определить граф, который может содержать циклы? Ведь получается что мне в конструктор объекта нужно передавать объект который еще не создан.Пока единственное что приходит в голову - хранить не ссылки на Node в ребрах, а какой-то индекс, а в самом графе хранить мапу из индекса в ноду. Но блядь, какого хуя? Лишнее преобразование, плюс потенциальное место для ошибок несуществующими индексами.
Кто-нибудь на fpconf собирается?
>>876258>У тебя есть гарантии, что хотя бы один фп язык станет мейнстримным?Скала с тайплевел стеком чем тебе не мейнстримный функциональный язык?
>>882491Я.
>>882494Тем что он сдох они переименовались и переключились главным образом на жаву, перестав даже спонсировать саму скалу?
>>882503Головка от хуя.>>882491Щас бы о таком на ананасовой борде спрашивать. Еще вкшечку с авторизованным паспортом попроси сразу прикреплять к ответам.
>>882479Да, по индексам. Нет, лучше нельзя. Страдай Наслаждайся функциональным программированием.
>>882479Почему тебе нужно именно такое представление? Задавай граф матрицей инцидентности, например.>>882518Кто вам это в уши насрал? LIghtbend всю свою инфраструктуру строят на скале, просто начали уделять больше внимания джавистам. Хотя и раньше в джаве использовали play и акку.
>>882647>Задавай граф матрицей инцидентности, например.У меня очень большие графы (миллионы узлов), притом довольно разряженные. Матрица при этом дохуя лишней памяти, она годится только для небольших плотных графов. Так что только списки ребер, только хардкор.>>882536Мда. Ну и нахуй ваш этот хачкель нужен, если я рпостейшую задачу из теории графов без ебли на нем решить не могу?
>>882732Он для развлечения нужен, лол.Хочешь писать что-то кроме кластера метапарадигм и дрочива на типах — возьми что-то попрактичнее. Окамл, скала там. цл если ты скобкофил
>>882740> возьми что-то попрактичнее.> Окамл, скала там. цл если ты скобкофилИз огня да в полымя. На окамле вообще писать нереально даже чисто из-за его синтаксиса, не говоря уже о мёртвой экосистеме, тулчейне который на винде настроить так же сложно как хаскель 10 лет назад. ЦЛ невменозный язык гениальных решений типа сadaddr и mapc. Scala - Java для шизофреников.
>>882745Хз что там у окамла с экосистемой, иде нет как и на том же хаскелле — онли редакторы с утилитками автокомплита. С синтаксисом у него всё как раз таки заебись в хаскеле повырвиглазистей, хоть и компактнее, если ты сидишь на венде — ок, отпадает.Цл предложил "просто так", ради разнообразия лол.А вот что не так со скалой, при том что ты сам на яве пишешь — мне в голову совсем не приходит.
>>882732Хаскель ленивый, может это поможет циклические зависимости сделать. Нужно погуглить, я в хаскеле не силен.
>>882740Скалу я и так использую по работе. Понравилась функциональщина но раздражает слегка ее (скалы) переусложненность, в итоге решил попробовать вкатиться в чистый функциональный язык.>>882751Это не я отвечал. Я как раз сейчас перекатываюсь из джавы в скалу (пару проектов уже на ней сделал небольших), ну вот решил заодно хаскелль глянуть.
>>882752Я уже погуглил, везде предлагают или какой-то грязный трюк использовать, либо делать как я сказал - через промежуточную индексацию узлов.
>>882790>грязный трюкТы про это: https://wiki.haskell.org/Tying_the_Knot ?Ничего грязного в нем нет, это просто использование особенности языка. Через ленивость еще и мемоизация делается: http://stackoverflow.com/questions/3208258/memoization-in-haskellЯ иногда хочу поглубже изучить хаскель именно из-за ленивости: на скале, например, я могу писать чисто функционально, это вопрос дисциплины, а вот модель вычислений поменять нельзя.
Функциональная парадигма норм в Kotlin реализована?
>>882818Kotlin конечно мультипарадигменный язык, но все прагматичный и по этому больше ООП.Для любителей функциональщины есть сторонняя библиотека https://github.com/MarioAriasC/funKTionale
>>882803>из-за ленивостиПоясните, какой в ней практический профит? То есть да, в каждой статье про хаскелль будет обязательно написано про охуительные оптимизации, связанные с чистотой функций вообще и ленивостью в частности, в итоге из текста создается впечателение что ленивость охуенно позволяет выигрывать в производительности. Но при этом по результатам бенчмарков и тестов хаскелль нихуя не впереди планеты всей, по производительности он в целом уступает С++ и держится где-то на уровне джавы.Ну и смысл в этом всем тогда?
>>876182>фп>начать писать более лучший кодпроиграл с этого аутиста.обычно фп-лажей увлекаются лишнехромосомные "интеллектуалы", не осилившие ооп-дизайн, которых заебали собственные же полупроцедурные высеры.
>>882845Не знаю где это ты видел что ленивость = оптимизация (и как вообще ты связал это с чистотой), это чаще всего абсолютно наоборот например выделить большой кусок памяти под весь массив разом будет куда быстрее чем делать это при обращении к каждому последующему элементу.Чистота вот уже может помочь оптимизации кода, но точно так же только в определённых юзкейсах а может так же всё здорово замедлить.То что он держится на уровне жавы на практике ирл он заметно медленнее, а как-то выезжает только в синтетике, и то не везде, лол — это уже ахуенный результат, показывающий насколько хорошо порвботали разрботчики ghc. Просто это, видишь ли, это декларативный язык — он намного высокоуровенней жявы, и его скорость решается в первую очередь оптимизатором, а не тем насколько обосрался при написании.>Ну и смысл в этом всем тогда?развлечение, считай это тестовым обкаточным полигоном для новых(зачастую старых) крутых концепций, которые рано или поздно окажутся во всех языках в той или иной мере, просто сейчас для них рановато — так же как симула в своё время, или Джобс со своими рассказами 2007-го года "как всё окажется в браузере".
>>875637 (OP)>Types and Programming LanguagesЭта книга не про практическое программирование, это по сути CS/математика с кивками в сторону имплементации компиляторов. Она точно нужна в этом списке?
>>875952Видимо, что пробелы криво стоят в ОП.другой-анон
>>882875> (и как вообще ты связал это с чистотой)чистота как раз таки сильно влияет на ленивость. Именно благодаря чистоте хаскель знает, что при одном и том же аргументе будет то же самое значение, фаза луны и время никак не могут повлиять, а значит выполнение можно отложить
>>875637 (OP)Алсо бахни про Эрланг тогда уже или без типов не халяльно?
>>882912>>882914двачую, наряду с кложей второй фп-язык (хоть честно говоря эти потоки как-то не очень вписываются в концепцию "чистые функции"), который используется в реальном мире (особенно эликсир сейчас потиху заменят руби)
>>882845Ленивость == композиция. Можно писать простой код и он будет хорошо компонироваться с другим таким же кодом. грубо говоря
>>882845Сделать ленивое энергичным можно довольно легко, поставив какую-нибудь языковую йобу. Но вот наоборот в энергичном языке уже сложно - нужно писать специальные ленивые версии всего, и как-то еще заморачиваться.
>>882940>Сделать ленивое энергичным можно довольно легкоВообще-то, нет. "Поставив йобу" означает, что кто-то за тебя уже всё написал. А так тебе точно так же придётся переписывать всю библиотеку, которая была заточена под ленивость, и при энергичных вычислениях может просто зациклиться на самой невинной на первый взгляд функции. Да и если твой язык изначально ленивый, то энергичным его можно сделать, наверное, лишь поправив компилятор/интерпретатор, в энергичном же можно просто всё обернуть в функции (будет выглядеть как говно, но мы сейчас не об этом).
>>882518>Тем что он сдох они переименовались и переключилисьЯ не про тайпсейф, а про тайплевел: cats, shapeless, вот это вот все. Тут тебе и уже почти стандартная библиотека тайпклассов, и чисто функциональные структуры данных, и продукты с копродуктами.
>>883016>копропродуктамипофиксил*
>>882910>Она точно нужна в этом списке?Да. То что сегодня подразумевают под "функциональным программированием" - это во многом именно "программирование на уровне типов".
>>882479Рекуррентные и циклические определения? Думаю - коиндукцией, если такое есть в хаскеле.
>>882921Подробнее: https://hackhands.com/modular-code-lazy-evaluation-haskell/>>882845Кроме модульности, еще можно делать цикличестие зависимости и мемоизацию в чистом языке. Выше в ссылки были. А о производительности по сравнению с другими языками особено никто не говорит: в них тоже можно использовать ленивые вычисления, чтобы не считать лишнего.
>>883018Это лично тобой так воспринимается. Лямбда исчисление это функциональный язык и там типов нету. Я изучал долгие месяцы хаскел и зависимые типы, пытался присесть со штангой и сейчас решил что типизация и чистота мешают мне писать нормальный понятный код. На хаскеле что не пиши получается борьба с тайпчекером и какая-то ультразащитная хуйня. В общем если к коду нету офигенских требований по надежности я считаю сложную типизация оверинженерингом и через чур защитным стилем написания кода.
>>883018Там теоретическая книга, как она поможет программисту ? TaPL смысла новичку читать 0.
>>883018В итоге в списке 2 книги про то как начать программировать прикольно с нуля и неведомая теоретическая йоба с миллионом математических теорем в качестве упражнений.
>>882151Спасибо, почитаю.
>>882914Про эрланг просто есть уже тред. Надо ссылки бы поставить, да перекаты ведь, ссылки сдохнут.
>>883080Интро ту фп тоже теоретическая. В прошлом треде вкидывали более полный список книг, просто оп не все (пока) добавил и не в том порядке.
>>882479Не знаю, как правильно решать такую задачу, самого напрягает невозможность нормально задать циклические связи, но все чаще меня посещает мысль, что явных циклических связей даже в мутабельном коде быть не должно.Если данных мало, то можно их описать как угодно, заботиться об эффективности и компактности незачем. Если данных действительно много или они используются в вебгуйне, то приходится думать о сетевом взаимодействии, где циклических ссылок нет(хмл-параша не в счет). Выходит, что в любом случае уместно городить типы, подобные реляционным отношениям в БД, а не обычные объекты.
Приведите хоть один пример реальной задачи, где без циклов не обойтись и\или они сделают код в стопицотраз практичнее и элегантнее. Вот и мне ничего в голову не приходит.
>>882479Попробуй навернуть индуктивных графов поверх ST или чего-то в этом роде.
>>883454>хоть один пример реальной задачи, где без циклов не обойтисьРасчет произвольного физического говна с пачкой вложенных цикловмимо
>>883454Обход/заполнение массива/коллекции .
>>883593map fold unfold
>>883596медленно и ест память
>>883598Правда? В русте вообще все с этим ок, foldl' в хаскеле тоже вроде не сильно плох. Что не так, серьезно?
>>883601>В русте вообще все с этим окМожет потому что он вместо фолдов просто инлайнит обыкновенный цикл? Ты глянь имплементацию-то.Да и опять же: вложенность. Они хороши когда нужно что-то быстро перебрать за проход.Посмотри на benchmarksgame rust vs c и haskell vs ocaml - там где первые разгромно сливают на пустом месте всё внезапно забито мапами и фолдами.
Сага
>>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
>>883616>Тем более все равно используются циклыВсё равно всё компилируется в машкод for simplicity умолчим про байткод, так давайте писать на голом машкоде.
>>883627А давайте плодить бесполезные временные объекты и загружать страницы по 5 секунд.
>>883628Да, в 13 лет я тоже хотел переписать Веб на ассемблере.
>>883053>Лямбда исчисление это функциональный язык и там типов нетуА как же типизированное лямбда-исчисление, м-м-м?
Простое доказательство отсоса функциональных дебилов:Map:array_map( function($person) { return $person['name']; }, $some_array); Foreach:let r=[];for (let p of a) r.push(p.name);Практически в 2 раза меньше кода, и гораздо читабельней.
>>883658И что это за довнский язык?
Специальная олимпиада пхп-инвалидов ИТТ.
>>883658Зачем так длинно?
>>883650>>Лямбда исчисление это функциональный язык и там типов нету>А как же типизированное лямбда-исчисление, м-м-м?это надстройка, хочешь типов? Пожалуйста, но в своем сообщении я сделал акцент на то, что основа функционального программирования не требует типов. Можно быть функциональным, чистым и имьютабельным не сражаясь с тайпчекером. Тайпчекер не обязателен.
>>883658Ты дебил? Просто иди нахуй отсюда в свою пхп парашу. Фолд это оператор высшего порядка которые позволяют делать сложные преобразования данных в декларативном стиле, фолд изящно параллелится и математически прекрасен. Если ты не знаешь нахуя тебя хотя бы операторы высшего порядка (Даже джава долбоебы уже догадались, прикинь?) то что ты делаешь в этом треде?
>>883689> фолд изящно параллелитсяВ теории.
>>883689> фолд изящно параллелитсяТ.е. нет, он даже в теории не параллелится.
>>883689>фолд изящно параллелитсяКороче, ты обосрался. Вот.
>>883691В какой теории? Ты лурка начитался? ДАЖЕ ДЖАВА слесари это делают на своем хедупе, а в функциональном языке ты просто спавнишь еще один поток потому что данные не зависят друг от друга, в эрланге реализация распределенного мап-редьюса занимает до 50 строк, зависит от раскидистости почерка. Хаскелистам даже делать нихуя не надо вроде, он будет фолдить асинхронно даже не явно для программиста.
ой блять я проебался, фолд не параллелица, рили, я про мап имел в виду. Обосрамс случился
Но можем считать что мап это подмножество фолда где в фолд функции нету зависимости от аккамулятора
>>883696>данные не зависят друг от другаТолько вот в случае фолда они зависят.> Хаскелистам даже делать нихуя не надо вроде> вродеВсе твои "знания" — это набор слухов.
>>883700Как ты паралеллишь вычисления в хаскеле, лиспе. Пролей свет пожалуйста.
>>883710>Как ты паралеллишь вычисления в хаскелеhttps://hackage.haskell.org/package/parallel/docs/Control-Parallel.html
>>883712http://hackage.haskell.org/package/parallel-3.1.0.1/docs/Control-Parallel-Strategies.htmlДа уж как тут все не просто у ребят хаскелистовhttp://stackoverflow.com/questions/5606165/parallel-map-in-haskellТы писал параллельный код на хаскеле?
>>883713>Ты писал параллельный код на хаскеле?Нет. Но необязательно писать параллельный код, чтоб знать, что хаскель ничего "автоматически" не делает и Amdahl's law с причинностью нарушать не позволяет.
>>883715Ну это хорошо что ты знаешь конечно. Спасибо
>>883544>>883593Наркоманы, имелись в виду циклические ссылки, а не фор\уайл-луп, лол.
>>883658Foreach:let r=[];for (let p of a) r.push(p.name);Map:a.map(p => p.name)
>>883693>>883697Ну вообще-то параллелится, нужно только только чтобы функция, по которой идет фолд, была коммутативной.
>>883725>коммутативнойА может всё-таки ассоциативной?
>>883724Кстати, на каком языке аналогичный код будет короче всего?(map :name a)
>>883726Ассоциативной тоже, да.
>>883727>эти скобкиНа пюрэ на один символ больше (_. вместо :), но на два меньше.
>>883725Ну и это довольно сильные ограничения на функцию, которую можно сунуть в fold.Надо, во-первых, ограничить тип операции с a -> b -> b до a -> a -> a>>883728>Ассоциативной тожеЧто значит "тоже"? Ассоциативности достаточно, коммутативность не нужна.
>>883729А на каком-нибудь факторе, кстати, можно убрать явное упоминание аргумента, так что будет еще короче, наверное.
>>883730> ограничить тип операцииНу так это фактически и есть требование коммутативности, не?
>>883732Естественно, для коммутативности нужно a -> a -> a, но из a -> a -> a не вытекает коммутативность.
>>883734Верно.Короче, коммутативность нам нужна для того, чтобы промежуточные результаты можно было продолжать редьюсить в порядке их получения, разве нет? Ассоциативность нам дает только отсутствие разницы между левой и правой сверткой, но чтобы продолжать свертку на каждом уровне, когда готовы хотя бы два любых результата на этом уровне, нам нужна коммутативность, верно?Если нет коммутативности, то будут локи и не полная параллельность.
>>883739А, ну если ты хочешь в порядке получения, то тогда да, коммутативность нужна.>Ассоциативность нам дает только отсутствие разницы между левой и правой сверткойДаёт возможность параллелить вообще. Т.к. позволяет считать(x `f` (y `f` (z `f` (.....)))Как(x `f` y) `f` (z `f` w) `f` ....
>>883739>Ассоциативность нам дает только отсутствие разницы между левой и правой сверткойДля этого как раз коммутативность нужна.
>>883741Я это и имел в виду, да. Короче, мы просто под "параллельностью" подразумевали разные вещи: я - полную, а ты - хоть какую-то\практическую. Вот.>>883744Разве? Левая свертка - это ((a.b).c), а правая - (a.(b.c)). Или наоборот, вечно путаю, лол. Порядок аргументов тот же, порядок вычисления только другой.
>>883747>Порядок аргументов тот жеПри левой свёртке начальный элемент слева от `f`, а при правой — справа.
Но ведь все это по итогу сведется к тому что какие-то части параллелятся из-за отсутствия зависимости к следующим вычислениям а какие-то не параллелятся. Можно просто разделить эти задачи между потоками мапперами и потоками редьюсерами как это делают в эрланге например.Коммутативные функции про которые вы говорите выше ведь всеравно должны на каком-то этапе свернуться в 1 аккамулятор ведь. Правильно? Просто если операция коммутативна то можно ее сделать параллельно, но прицепить к результату свертки ее всеравно надо будет, или я что-то упускаю?
>>883749Короче, мне тут пытаются доказать, что fold параллелится. Только почему-то рассказывают про map-reduce.
>>883750Хер знает, для меня картина мира такая - мап можно распределить на хуилион потоков и потом свернуть результаты. Первая часть параллелится как нефиг, вторая под вопросом, свертка же тоже может быть простая например просто добавлять результат в set, что является ассоциативной и коммутативной операцией, тогда можно редьюсеров захуярить большое количество и это будет очень близко к тру параллельности. Но все должно будет сойтись когда-нибудь в 1 точку из-за чего эта параллельность не совсем чистая. Опровергните если я не правильно понял
>>883748И что? Это же разные (в общем случае) элементы. Давай еще раз: левая свертка от правой отличается расстановкой скобок, но не порядком аргументов. Мы не делаем (c.b).a, мы делаем a.(b.c) - ок? Из ассоциативности для трех элементов прямо вытекает ассоциативность для эн элементов, а левый фолд от правого только ассоциотивностью и отличается.
>>883756Ну ясное дело, что в итоге все сойдется в одну точку, но под параллельностью же мы понимаем разделение задачи на потоки там, где это возможно, да? То есть 2+2 - это частный случай параллельного вычисления: тут всего одна операция, так что ясное дело, что она выполняется атомарно (параллелить ее не с чем, она одна всего), но это как бы такой аналог базового кейса в рекурсивном определении. Короче, параллельность - это не значит, что мы в каждый момент времени нагружаем эн потоков, параллельность - это когда мы всю имеющуюся работу (относительно) равномерно распределяем по всем имеющимся потокам.>>883750Ну, мап - частный случай фолда, еали уж на то пошло, но я про мап-редьюс не рассказываю, если это ты на меня намекал.
>>883756>сойтись когда-нибудь в 1 точку из-за чего эта параллельность не совсем чистая.Что сие значит, "параллельность не совсем чистая"? А какая?
>>883762Почему ты не назвал функцию-аргумент эф?
>>883762> mappend
>>883762ну хуй знает дебильный термин применил.В общем в случае с мапом мы параллелим труево, потоки полностью параллельны и отобразить это можно как лист параллельными линиями мапится в другой лист. Рисунок параллельной свертки будет же выглядеть как полурешетка. Немного другая форма вычислений немного не такая, чем та, что ты видишь когда параллелишь маперы.
>>883762>>883771Предлагаю переименовать в mempty
>>883769Взял первый попавшийся пример из гугла.>>883774>В общем в случае с мапом мы параллелим труево, потоки полностью параллельны и отобразить это можно как лист параллельными линиями мапится в другой лист.Как мне кажется это схема, которая лишь описывает ограничение политики распараллеливания, то есть мы фактически говорим "дождаться результата применения функций вот в этом и в этом потоке и применить функцию в отдельном потоке". И вообще что ты подразумеваешь под "тру параллелим" - два потока Хаскеля, два потока операционной системы, два потока операционной системы привязанные к разным CPU?
>>883789Я имею в виду асинхронные процессы, как они реализованы мне вообще пофиг. у нас есть лист из 50 элементов мы делаем параллельный мап. Для этого спавнится 50 процессов внутри системы. Для программиста это выглядит так. В железе же у нас например только 1 алу и тогда планировщик распределяет нагрузку асинхронно. Если у нас 50 алу то они буду полностью параллельны.Ну в общем наверное надо от этого термина дурного тру-не тру отказываться, в целом я понял что фолд можно вполне эффективно распределить на много потоков если операции коммутативны, ассоциативны. Чуть менее эффективно чем мап.
Аноны, подскажите такую штуку.Есть класс с двумя функциями, назовем скажем Foo() и Bar()Функцию Foo() вызываю я сам, функцию Bar() вызывает другой элемент фреймворка, в неизвестный момент времени после вызова метода Foo(). Вопрос: Как мне, фп-way, передать некое значение из метода Bar() в точку вызова метода Foo()?Если кому-то интересно - язык C#, платформа Xamarin.Android
>>883832Нихуя не понятно. Код на шарпе скинь.
>>883874http://pastebin.com/NLuNXA6c если убрать все лишнее
>>883632Ты хотел, а я делал (пилил с друзьями сайтец на С++ с вставками на асме)
>>884022Через приватное поле класса, не? Нафига создавать себе проблемы на пустом месте, ну.
>>884086> Мутабельное состояние> Фп-wayЕще предложения?
>>884154>void OnActivityResultЭтот метод нужен только для изменения мутабельного состояния. О каком ФП-way идет речь?
>>884027>сайтец на С++ с вставками на асмеХуйня. Надо было делать свой православный бинарный формат заместо проклятого хтмл, а ты просто пыжылся сделать более лучшую раздавалку текста.
>>884190Я хочу отделить мутабельный код из фреймворка, на который я не могу повлиять, от моего кода, который будет чистым от побочных эффектов
>>884271Отделяй, но в этом конкретном случае фреймвор диктует тебе как писать код. Сложно писать функционально в неподходящем окружении. Это, к слову, не понимают дурачки которые кукарекают что скала с появлением восьмой джавы стала нинужна.
>>884154Локальное мутабельное состояние никак не противоречит никаким фп-уэй. Всем похуй, что там у тебя внутри одного класса происходит.Алсо, какой фп-вей, ты же на сишарпе пишешь под ооп-фреймворк. Еще раз спрошу - нахера создавать себе проблемы на пустом месте?
>>884520> Локальное мутабельное состояние никак не противоречит никаким фп-уэй. Всем похуй, что там у тебя внутри одного класса происходит.Верняк, любую глобальную переменную можно считать просто слепком мира IO-монады, все процедуры просто описывают отображения мирано для краткости это опущено как в синтаксисе так и в сигнатурах, но это сахарок - всё чисто.
>>884541Лол, ну так-то я не совсем это имел в виду. Я не про глобальные переменные, а про локальную мутабельность. Если чистая по сигнатуре функция создает внутри какое-то локальное мутабельное состояние, которое никак не ввходит наружу, то она все равно остается чистой для вызывающей стороны.
>>884560> что там у тебя внутри одного класса происходит.Тогда лучше было написать "внутри функции", потому что мутабельные поля класса - то же самое что глобальные переменные.
>>884566> поля класса - то же самое что глобальные переменныеНоуп. Объекты - замыкания для бедных.
>>884574Монады - замыкания для богатых (умственно и духовно).
>>884577Не уловил. Монады тут при чем?
>>884574>>884577Акторы - замыкания для богатых (материально).
>>884577Массивы - замыкания для честных.
>>884581Алло джо ето ти?
>>884582Числа - замыкания для мутных.
>>884566>поля класса - то же самое что глобальные переменныеЗависит от интерфейса класса. Если их изменения видны снаружи, то да, ты прав. Если это какой-то кэш для мемоизации что-то не могу больше примеров придумать, разве что для самопальной реализации ленивости, то нет.
>>884463Сложно, ну что мешает>>884520локальные мутабельные переменные меняют состояние объекта класса>>884581А они кстати в моем случае не подойдут?
TaPL не качается.
http://gen.lib.rus.ec/search.php?req=Types+and+Programming+Languages&lg_topic=libgen&open=0&view=simple&res=25&phrase=1&column=defTaPL и ATiTaPL.
Ньюфаг написал свою первую монаду.Посоны, как упрощать подобное: f = Constr <$> ( (++) <$> astr <> ( achar > (('#':) <$> astr) ) )Constr :: Str -> SomeTypeastr :: SomeApp [Char]achar :: SomeApp CharЧёт трудно ориентироваться в этом вашем лифтинге.
>>885767Бля, забыл про разметку.
Господа, а поясните-ка мне одну вещь. Я правильно понял, что в конструктивной математике (в контексте данного треда - в языках с зависимыми типами) теорема Ферма доказывается в одну строчку пикрелейтед и ее фальшивость подтверждается тем фактом, что соответствующий такой спецификации тип пустой? Как написать конкретный код (неважно на чем) для проверки?
>>886152Там же написано, что можно написать спецификацию, не зная, существуют ли программы, ей удовлетворяющие. Пикрелейтед нет никакого доказательства, там только формулировка соответствующей теоремы (т.е. тип). Доказательством была бы программа.
>>886184Ну смотри, в прувере пишется спецификация, и если нет программ, удовлетворяющих такой спецификации, то спецификация противоречивая и ей соответствует пустой тип. Это же и есть доказательство теоремы Ферма, т.е. ее абсурдности.
>>886188Как доказать, что таких программ нет?
>>886191Попытаться их построить конструктивно, т.е. начать перебирать указанные в спецификации a b c и n. Как только найдется n, нарушающий равенство в последних скобках, считай доказательство построили.
>>886191Доказать отрицание утверждения.
>>886194Доказать отсутствие перебором? Ну-ну. Алсо, как из перебора натуральных чисел у тебя получается программа?>>886195Как?
>>886205Ты не понял жи. Согласно этой спецификации требуется найти 4 натуральных числа, удовлетворяющих условиям спецификации. Правильность теоремы Ферма зависит от того, есть ли такие числа для всех случаев. Любой набор положительных чисел, не соответствующих спецификации является доказательством ложности теоремы Ферма.
>>886205Т.е. программа в данном случае - это функция от 4 аргументов: (exist a:N)(exist b:N)(exist c:N)(exist n:N) -> (n>2&a^n+b^n=c^n).
>>886207>>886218Ебать ты даун. Как можно в 2016 путать forall и exists.
А, нет, ты прав. Эта сигнатура - это и есть утверждение отрицания теоремы Ферма.
Собственно, задача - конкретный код >>886152 этого. Чтобы можно было тралить сторонников неконструктивной математики, которая еблась с теоремой Ферма 200+ лет, а в конструктивной все доказывается одной коммандой на функциональной ЯП.
>>886245Не будет никакого траленга. Всё точно так же: достаточно найти один контрпример и тогда получится записать терм с таким типом -> теорема опровергнута.
О, тут уже анон опроверг теорему Ферма. Скоро получит славу и признание научного сообщества за своё открытие.
>>886273Специально для тебя, прямолинейного долбоёба:> -> теорема опровергнута> и ТОГДА теорема БУДЕТ опровергнута
https://youtu.be/fhOHn9TClXY
>>886218Зойчем ты перепечатал это еще раз, это же на том пике написано.>>886207То есть тот факт, что эта теорема истинна, тебя не смущает? Еще раз: доказать отсутствие перебором? Алсо, как из перебора натуральных чисел у тебя получается программа?
>>886387Ты перебираешь на бумаге или ещё где, а когда найдёшь 4 подходящих числа, тогда можешь их вписать в код и они будут термом-доказательством вот этого типа: (exist a:N)(exist b:N)(exist c:N)(exist n:N) -> (n>2&a^n+b^n=c^n). Всё, больше никак. Если не найдёшь такие 4 числа - доказать этот тип не сможешь.
>>886407Замечательно.
>>886194>Попытаться их построить конструктивноПошол нахуй, интуитивистский питух.
>>886669Интуиционисткий.Починил таки.
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“, лол.
Да, как я из его слов понял, как это примерно может выглядеть. Вот пишешь либу, решаешь ее зарелизить. Делаешь неймспейс либраринейм.апи.в1. Помимо него у тебя есть еще и либраринейм.приватный-стафф. Делаешь джар\гем\крейт, модуль короче, в котором пишешь, что он провайдит либраринейм.апи.в1 (а про приватный-стафф ничего не пишешь). В следующем релизе решаешь добавить еще одну функцию в апи, например, - это все еще в1-компатибл апи. Еще через релиз понимаешь, что тебе надо переименовать (то есть убрать одну и добавить другую) функцию - создаешь либраринейм.апи.в2, экспортируешь туда весь в1 апи и делаешь замену, релизишь. Приватный-стафф остался тот же, реюзаешь. в1 апи остался тот же, ничего не ломаешь. В мавене теперь лежит два модуля: только с в1 и с двумя в1 и в2 апи, оба называются "либраринейм", второй расширяет первый, ничего не сломалось. Потом делаешь следующий релиз и все переписываешь с нуля, апи.в3. А первые два апи выкидываешь, чтобы не загромождать код. Тогда модуль будет называться уже, условно, "либраринейм-некст", потому что он ломает совместимость => другое имя. Еще по идее можно вытаскивать все эти в1 и в2 из гита, а не держать в стейджинге. И все эти переименования будут формально проверяться, то есть если попытаешься запушить под тем же именем модуль, из которого что-то выкинуто - компайлтайм эррор (точнее релиз-тайм), если код функции изменился по сравнению с прошлым коммитом - релизтайм ворнинг, тут уже придется повериьь на слово, что поведение не изменилось.
>>886387>Еще раз: доказать отсутствие перебором?Либо присутствие. А как ты еще предлагаешь доказать что-то кроме собственно построения вычислимого объекта и его предъявления в качестве доказательства?>как из перебора натуральных чисел у тебя получается программа? Тут >>886407 за меня ответили. Пустой тип соответствеут абсурдности изначального высказывания, непустой - доказательству такового высказывания, это интерпретация логических констант по Гейтингу. Программа = функция в конструктивном смысле, т.к. принимает нечто на вход и выдает нечто на выходе. Пример - лямбда же, да и вообще все функциональное программирование.>>886696Ты хоть название для начала писать научись, потом предъявляй что-то.
>>887493Ты меня не так понял. Ладно, неважно.>>887493Я и не предъявлял, а починил предъявлявшего.
Хуле тонем
ПримерУ меня есть чистые функции func1 и func2 и "грязная" funcIO (она делает запрос к вебу)func1 вызывает func2, которая вызывает funcIOЯ хочу подменить funcIO на фейковую и протестить func1Как это сделать?=================================================Сначало я передавал funcIO как параметр в func2, но из-за этого funcIO приходится передавать еще в func1.Минусы: параметры метода засоряются и много копипастыСейчас я храню такие "грязные" функции как бы в глобальном словаре и планирую в тестах заменять его элементы на фейковые.Минусы: появляется некая неявность в программе, те вызываю функцию и не знаю заранее, а вдруг где-то внизу есть запрос в сеть и тп.
>>888294>протеститьНапример http://www.parsonsmatt.org/2016/07/14/rank_n_classy_limited_effects.html
>>888294Передавать всем функциями словарь env с компонентами, которые делают всю грязную работу. Это устоявшаяся практика тащем-то. Алсо, если у тебя ф2 вызывает ио, а ф1 вызывает ф2, и ты хочешь тестировать ф1, то у тебя скорее всего неоптимальная архитектура. Надо стараться, чтобы в каждом модуле только функции верхнего уровня требовали енв, а вся логика была в чистых функциях, которые бы чейнились с грязными функциями линейно, а не вложенно. Не всегда так красиво получается сделать, конечно, ну и без контекста непонятно, что там у тебя с этим.
>>888340OK, спасибо что рассказал своим словами.Постараюсь поднять наверх запрос к вэбу и перенести список IO фунций из глобального стейта в env.
>>888340>ф2 вызывает ио, а ф1 вызывает ф2>вызываетНу что же вы, функцаноны.
Видео для новичков от трансгендера функционального программирования:https://www.youtube.com/watch?v=25u-pp-7PHE
>>888427Не понял, чего?
>>888804Больше трансгендеров богу трансгендеров! https://youtu.be/lvclTCDeIsY
>>888804>>888925Всё, ФП зашкварено.
>>888928Изначально такое было.
>>888925Раз пошла такая пьянка:https://www.youtube.com/watch?v=DHubfS8E--o
>>888928Эх, щас бы вспомнить о том, что Тьюринг был гей-шлюхой...>>889008Она же не транс, ты чего. or is she?
>>889076> это транс
>>889080Да ладно! Не, не верю, я ее видел до этого дохрена раз, и никакие детекторы трансов во мне не сработали... Бля, я что, зашкварен теперь?! Да не транс она.
>>888925Начинать презенташку с "мы тут все женщины, делай с этим, проклятый цис-скам", а потом просить помощи - это какой-то просто next level маркетинга.
>>889385> цис-скамЗабавно, что ни мне, ни остальным присутствовавшим в зале даже в голову ничего такого не пришло (потому что она ничего такого и не говорила), но insecure slavshit как всегда нашел повод, чтобы обидеться, хе-хе.
>>889414>в голову ничего такого не пришлоПотому что ты живёшь с своём мирке, и тебя феминистки и прочие социальносправедливые воины ещё не заебали.>она ничего такого и не говорилаОй-вей, тебе цитатки дать? А вначале что это было? Ленгвидж мейд бай вимен, дил виз ит, експект зем ту нов беттер зан ю, мы тут не любим вайт цис-мелес и делаем свой язык как хотим - вот это вот всё?>обидетьсяСколько тебе лет?
>>889385>цис хуис маркетингСука, ебаное программирование. Только червь-пидор в 2016 году считает эту профессию илитной. Как хорошо было на васме, где ебанутых слали на хуй и поливали говном. А современное ойти целиком состоит из пидоров.
>>889423Ну так если тебя заебали какие-то воображаемые враги, то почему мирок у меня, а?Да, дай цитатки, где там про цис-скам было. У меня такое чувство, что ты либо не уловил поинта того, о чем они говорили, либо я даже не знаю. Если тебя так раздражает сам факт того, что бабы делают язык и могут быть более лучшими профессионалами, чем ты, то тут уж горбатого толлко могила исправит.Обижаешься ты, а спрашиваешь сколько лет меня, хех. Немного меньше тридцати.
>>889432Ололо, еще один славшит стриггерился, найс.
>>888804какой-то толстый негр в нелепых рюшкахпромотал к концу, конечно не забыл всем напомнить что он transwoman of colorпроверил на гитхабе, в репе ничего кроме js/phpделает как я понял всякие ui и фронтенды
>>889432Пидоры не могут в программирование, и ни в какую другую разумную деятельность ввиду нарушений в работе ЦНС, проявляющейся в ригидной деградации интеллекта. Их сознание состоит из подобных фраз: >>889438 на 80-90 процентов, эти фразы настойчиво повторяются ежедневно, годами, почти без вариаций. Т.е., фактически, пидор - это просто сломанный спамбот, который несёт ненужную раздражающую пургу в пустоту.
>>889452Смотрите-ка, манечка детектировать начала, лол. Продолжай, пожалуйста.
>>889457> манечка> началаПошел на хуй, пидорас!
>>889461Почему ты обсуждаешь хуи и геев в треде про фп?
>>889466Потому что ты пидор и надо послать тебя на хуй?
>>889435>Да, дай цитатки, где там про цис-скам былоНе дам. Удалил видео уже. В самом начале, ещё до представления авторов языка он говорит про white cis-males. Наверное, даже до четвёртой минуты. И проблема в тебе, если ты знаешь, что социально-ориентированные подразумевают под white cis-males.
>>889467> пидор> хуйИди подрочи уже и успокойся.>>889476> Не дам.Конечно не дашь - ведь ты выдумал слова про проклятый цис-скам, и сам же на них и обиделся.Вообще, это очень забавно, что их поинт как раз в том и состоит: "у меня есть пизда, но что имеет значение - это мой код, so let's talk about that" - и славскам, разумеется, гневно обсуждает их гениталии/гендер/социальную позицию - что угодно, кроме собственно кода. Ну хули делать, иди радио радонеж послушай да блинов с лопаты наверни.
>>889664Но зачем мне успокаиваться, когда я могу хуесосить тебя, охуевшего гнойного обосранного пидора-чмошника?
>>889667Матешу сделал?
>>889668Матан нинужен для успешного ФП-Программиста.
>>889664
Ну вот и славно, на этом и закончим.
>>889664>Конечно не дашьКонечно, не дам. Что проще - мне скачать целиком видео, чтобы дать тебе точное время и получить в ответ "это нищитается и всё нитак", или тебе тыкнуть на ссылку, посмотреть это видео пять минут (первую даже можешь промотать) и самому во всём убедиться? Ведь, судя по всему, тебе важно победить в интернете, и видео ты смотреть не будешь, даже если я дам тебе точные секунды.>выдумал словаАй-яй-яй. Да, там не было сказано слова "скам", но если ты посмотришь-таки видео, а потом пойдёшь на тумблер, сходишь в твиттеры и блоги феминисток, погуглишь social justice warriors, white male supremacy и т.д., то ты сам поймёшь, что мне не понравилось. Но, предупреждаю тебя, не лезь туда. После этого ты никогда больше не будешь прежним.Можешь не отвечать. Я, например, больше не буду, пока ты не ознакомишься с предметом. И вообще, иди-ка ты чекни свои привилегии.
>>889746Чекнул тебе за щеку своими хуеблядскими 18 сантиметрами, проблемы?
>>889664>"у меня есть пизда, но что имеет значение - это мой код,Это норма, когда хочешь обсудить свой код, но вступительное слово посвящено пизде? Может тоже стоит начинать совещния типа "У меня хуй, но давайте обсуждать проблемы на продакшене."?
>>889746Зойчем тебе скачивать видео? Ты что, наркоман? Алсо, я как бы его смотрел (даже больше, лол) перед тем, как сюда вкинуть, сюрприз.Ну и надеюсь ты сам понимаешь, как ты глупо выглядишь со стороны, признавая наконец, что ты выдумал эти слова (и на том спасибо, хех), но при этом продолжая нести ахинею в стиле "а вот если ты погуглишь то там будут хейтеры!! поэтому она тоже хейтер и ненавидит меня!!". Тут уж не привелегии, тут логику надо чекать.>>889764Вступительное слово посвящено комьюнити билдингу. И да, в цивилизованных белых странах это норма.
>>889766>Зойчем тебе скачивать видео?Потому что прогрессивные веб-технологии, блягодаря которым у меня ютуб не работает.>я как бы его смотрел (даже больше, лол)Интересно, и что же ты с ним делал? Наяривал на белобрысую, небось?
>>889766>поинт как раз в том и состоит: "у меня есть пизда, но что имеет значение>Вступительное слово посвящено комьюнити билдингукомьюнити билдинг - это что-то вроде свинг вечеринок для трансгендеров?
>>889773Да.
>>889771Дай угадаю: в том, что у тебя не работает ютуб, виноваты проклятые американцы с их проклятыми трансами и проклятыми веб-технологиями, лол?Ебаный цирк просто.>>889773Предлагаю вам тебе? починить ютуб, а потом погуглить про это, лол. По-английски местные иваны хоть шпрехают?
Не ругайтесь ребята! Давайте лучше обсудим монады.
>>889776>Дай угадаюДруг мой, да у тебя всё совсем плохо. Если сначала я ещё думал, что ты всего лишь не в теме, то чем дальше, тем больше убеждаюсь, что ты просто типичный сосачевский долбоёб. Вот ты уже нафантазировал и "лоллируешь".>Предлагаю >починить ютубА вот теперь я уже в его глазах стал гуглом.
>>889777У меня такое чувство, что вместо гормонов она пьет пиво, лол.>>889782Я с тебя лоллирую с самого начала нашего конверсейшена, клоунишка, просыпайся. И ютуб почини, тяжпрограммист, лол.
>>889786Смузи с бороды стряхни, ангулярщик.
>поинт>конверсейшена
>>889962нам нужна физибл агенда.
Решил попробовать пройти курс по структурам данных решая задачки на хаскелле, и на второй уже обосрался.Надо посчитать высоту дерева за разумное время, на вход подается две строки: первая - колво нод, вторая - список указателей на родительские ноды, у корневой этот указатель равен -1.на пример:54 -1 4 1 1это такое дерево:1|\3 4 / \0 2На питоне решение написал, а на хаскеле не могу. Целый день просидел, ниче дельного в голову так и не пришло (хотя кажется что задача супер-тривиальная).Анон, подскажи как переписать это на хаскел pastebin.com/mtXaNdNt
>>890119Сам вкатываюсь потихоньку. Я бы так сделал: функция, в которой берем элемент, берем следующий элемент по индексу из значения предыдущего элемента и т.д. пока не получим -1, . Рекурсивно применяем эту же функцию для следующего элемента. Возвращаем максимальное количество шагов, полученных проходом по элементам и в результате применения функции к следующему элемету.
>>889786>У меня такое чувство, что вместо гормонов она пьет пивоВ 1952 году Алан Тьюринг был признан виновным по обвинениям в совершении «грубой непристойности» в соответствии с «поправкой Лабушера», согласно которой преследовали гомосексуальных мужчин. Тьюрингу был предоставлен выбор между принудительной гормональной терапией, призванной подавить либидо, или тюремным заключением. Учёный выбрал первое.
>>890127Трап != пидор. Тем более что Тюринга заставили. И судя по фоткам он всегда был ухоженной стройняшей.>>889786Ну так современная ослиная моча которую называют пивом даёт тот же, хоть и слабый, эффект, но с побочками в виде пуза.
>>890119суть строки:> (+ 1) . maximum . map height $ childrenдля всех детей вызываем функцию height, находим максимум среди всех высот, добавляем 1
>>890140>>890124такое я уже писал, но оно не проходит тесты на больших деревьях (слишком долго считает), в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторно, а как сделать подобное в haskell варианте - хз
>>890145>такое я уже писал, но оно не проходит тесты на больших деревьях>пройденные ноды и не считаю их повторноПоскольку мы имеем чистые функции, хаскель может кэшировать результат применения функции к набору уникальных значений аргументов. В этом плане тебе ничего запоминать не надо. А считает долго из-за иммутабельности, при каждом применении функции создается копия твоего дерева. Тебе надо дерево как глобальный объект представить, но я пока ХЗ как это сделать. И вообще я не понимаю зачем там что-то повторно считать нужно.
>>890145хаскель делает такое из коробки, лол)
>>890145>в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторноА что, есть шанс при подсчёте высоты наткнуться на ноду больше одного раза? Это же дерево.>>890155> хаскель может Даже кофе варить. Есть пруф что он варит?> при каждом применении функции создается копия твоего дереваС чего ты это взял?>>890156Пруф.
>>890119Сдаётся мне, тут не нужно строить дерево.
>>890180Да, так лучше наверно будет.А пруфов не будет, нужно верить.
>>890191я и не строю, изначально мысль была следующая считать по порядку высоту для каждой ноды из списка на входе, попутно занося посчитанные ноды в отдельный список, чтобы не считать их по несколько раз, в принципе можно построить дерево, и посчитать его высоту как предлагали выше, но как сделать дерево из входного списка я тоже хз.>>890197у тебя вроде куска кода не хватает (deep2)
>>890145>в питоновском варианте у меня есть переменная в которую я заношу уже пройденные ноды и не считаю их повторноДа, сорян, я тут >>890180 поторопился. Если ты не строишь дерево, то тебе, конечно же, нужна мемоизация.Data.Map.Strict поможет, надеюсь.
>>890202боже, я уже по-русски писать разучился
>>890202>у тебя вроде куска кода не хватает (deep2)Это собственно весь код и есть. Опечатка, deep1 конечно. Здесь не строится дерево. Кстати можно оптимизацию небольшую сделать, строить высоту только для листьев. То есть для тех элементов списка, индексов которых собственно в списке нет. То есть в примере получается для 0 2 и 3 элементов. Можно условие в генераторе списка зафигачить. Завтра подумаю.
>>890214Хотя чего тут думать-то.
>>890219тоже пытался так сделать, но на большом (100000 элементов) списке все равно виснет.
>>890222> используется (!!)> чёт виснетMiracle!
>>890223>>890222Ну да !! сложность O(n). Надо будет на массивах наверно переделать.
>>890228А там и мемоизацию запилишь на массивах.Короче, задача такая, что её решение никак не ложится на ФП "красиво".
>>890219>>890223вот я дурак конечно...завтра переделаю с массивами вместо списков.Спасибо всем!
>>889810> implying angular is hipsterКак там в 2010?
>>890230Ну ты как там, переписал? Вообще хорошая задачка, помогает разбираться. Я вот переписал с мемоизацией. Не проверял работает или нет, но по идее должно. Следующий этап будет - своя мемоизация на IntMap, прямо как вот этот >>890229 анон наванговал.
наговнокодил на векторах, но гдето запутался. На больших инпутах не падает, но считает неправильно.а что за плагин, который -> заменяет на →
>>890730>>890655не тот скрин
>>890730Шрифт с лигатурами очевидно. Fira code, haskellig там.Пойду дальше порофлю с того, как хаскелимакаки всем тредом не могут высоту дерева посчитать. Хороший язык.
опять проебался
>>890755Чет похоже на императивщину. Не знаю как ты большие деревья генеришь, но попробуй вот такой вариант.Да, это FiraCode.
>>890861Ты задолбал с deep. Глубина это depth.А в задаче вообще просят height
>>890119Так, теперь быстро объясняй мне, почему высота дерева не равна количеству уникальных указателей
>>890899Количество уникальных указателей: 2⁶⁴
>>890901Ты дал совершенно даунский ответ на вполне понятно поставленный вопрос. Впрочем я и без тебя разобрался, не стоило
>>890910Даун, почему у тебя unit type обозначен значком пустого множества? Даже если выкинуть ⊥, то это не будет пустым типом.
>>890912Даун, потому что создатели хаскелевого мода для имакса так считают, даун
>>890914Значит создатели мода дауны. Как и пользователи.
>>890910И где там указатели?
>>890915Ясно. В ФП на уровне чуть выше рекурсии списков и мапов с филтрами наш многоуважаемый опущ не умеет. Иначе как объяснить что простейшая программа с мемоизацией при помощи State Monad оказалась ему не под силу Зато он умеет рассуждать о том, кто здесь даун, а кто не очень, рассматривая кастомные темы в чужих редакторах.>>890916Тебе пальцем показать, или лазерной указкой?
>>890917>Ясно. В ФП на уровне чуть выше рекурсии списков и мапов с филтрами наш многоуважаемый опущ не умеет.Откуда такие выводы?> Тебе пальцем показать, или лазерной указкой?Как тебе удобнее.
>>890918Например оттуда, что я зайдя в тредик за 15 минут накатал программку. А ты сподобился выдавить из себя "даун, даун, даун" и, в общем то, всё>Как тебе удобнее.Справа в буфере с интерпретатором, поступают на вход с функции treeDepth
>>890919>Например оттуда, что я зайдя в тредик за 15 минут накатал программку.Молодец. Что не отменяет твоих незнаний элементарной теории множеств.>Справа в буфере с интерпретатором, поступают на вход с функции treeDepthТолько treeDepth не считает число уникальных указателей.
>>890921>Unit -тип содержащий один элемент>Тип>Теория множествЯсно, понятно>Только treeDepth не считает число уникальных указателей.Да, не считает. Зачем их считать, их ведь 2^64
>>890922В общем, ты слился, как все любители попонтоваться.
>>890910>Ты дал совершенно даунский ответ на вполне понятно поставленный вопрос.Нет, непонятно.> Впрочем я и без тебя разобрался, не стоилоЧто, с пруфом "высота дерева == числу `указателей'" не получается?
>>890926>Что, с пруфом "высота дерева == числу `указателей'" не получается?Что за бред ты несёшь?
>>890927Какой ещё бред, даун? Это ты заметил, что высота дерева == числу уникальных указателей. Я тебя и спрашиваю, почему ты это не используешь. С пруфом проблемы?
>>890929В предыдущем твоём посте ты проебал слово "уникальный", что изменило весь смысл на практически противоположный>Это ты заметил, что высота дерева == числу уникальных указателейЯ попросил тебя переубедть меня. Ты не сподобился и я переубедил себя сам>С пруфом проблемы?Значение знаешь? Учи мемы чтобы не быть баттхёртом
>>890910спасибо, анон, работает!пиздец, 15 минут, а я третий день сижу...
>>890930>Ты не сподобился и я переубедил себя самКонтрпример.>Значение знаешь?Пит буль.
>>890931>15 минут, а я третий день сижу...Я уже давно написал: юзай Data.Map
>>890933да я пытался вроде, правда без монады
>>890934Гонять Map аргументом еквивалентно заворачиванию в State-монаду.
>>890931>пиздец, 15 минутРешал раньше похожую задачу,на самом то деле, поэтому быстра. Так бы долго втыкал, наверное
>>890936Где контрпример?
>>890931Можешь просто считать список чисел в set и размер set будет путём.
>>890950В смысле длиной самого длинного пути.
>>890950>>890951Хотя да, это неверно.
>>890910Сап, анон, напиши пожалуйста функцию najtiElementVMassive, а то я 3-й день уже сижу!
Аноны, а в такой реализации fun2 мемоизируется, так как определена в бесточечном стиле через memoFix2, то есть при вычислении высоты дерева из определенного узла должны использоваться закешированные значения высоты из вышележащего узла, если они уже вычислены конечно. И fun4 тоже мемоизируется, так как определена в бесточечном виде, а l исплоьзуется из области видимости where. То есть при при обращении к значению списка по индексу, только данное значение добавляется в массив (из-за ленивости), и при следующем обращении будет обращение уже к массиву по индексу. Или я где-то ошибся в рассуждениях?
Я так и нипонел, нахуй вы используете кокоето гавно, когда есть Data.Tree?
>>891055Ну вот Хаскелл например учу, с мемоизацией хочу разобраться.
>>890119кстати, а ведь при таком условии нельзя сделать циклический граф, который будет связан с рутом, разве нет? Какой смысл в мемоизации?
>>891064> Какой смысл в мемоизации?Смысл в том, что дерево не строим. На входе у нас есть пары (вершина, родитель) и высоту считаем для вершины считаем как 1 + высота_от_родителя_до_корня
>>891071> высоту считаем для вершины считаем как высоту для вершины считаем как
>>890938Сам придумывай"4 -1 4 1 1 3" Высота по-прежнему 3, уникальных идентефикаторов - 4>>891064Потому что без мемоизации сложность по времени O(n^2)
>>891075>Сам придумывайУже.
>>891053Аноны, поясните же, я все правильно понял или где-то ошибаюсь?
>>891092мне кажется гдето ошибаешься, потому что тесты не проходит (виснет).залил архив с тестами если интересно: http://rgho.st/6RdYLFPy9
>>891468Наконец-то тесты.
>>890119>>891468>>891478Раз уж появились тесты, решил попробывать написать.Считает правильно, но медленно.https://cpy.pt/HyxJaMkC
>>891515Вот так обрабатывает 24 теста за 11 секундhttps://cpy.pt/KKBwUx8NИспользуется https://hackage.haskell.org/package/multimap
>>891548https://cpy.pt/Y1R263zg
>>891548В девятой строчке надо заменить(Map.insert (-1) 1 Map.empty)на простоMap.emptyНа ответ это не влияет, но текущий вариант выглядит странно. Никакой вершины (-1) нет
>>891548Да и, честно говоря, Map там нахрен не нужен. Попробую без него переделать.
>>8915629 секунд на все тесты
>>891585на моем компе вариант этого анона>>890910 продит все тесты за 6 секунда вариант на питоне за три, лол
>>891676>на моем компе вариант этого анона>>890910 продит все тесты за 6 секундА мой вариант за сколько?
>>890910Что за редактор?
>>891682имакс жи, в треде написано
>>891676Можно ускорить выпиливанием ленивости через BangPatterns. Также, вместо IntMap можно мемоизировать ST массивом, и по идее это даст хороший прирост производительности, но код скорее всего получится не очень
>>891468Ммм, как их выполнить? Даже как и гуглить не знаю то, лол
>>892118это входные данные (номерные файлы) и результат который должен получиться (файлы с расширением .a) для линукса - выше скриптик был, для винды - хз.Кстати по условию задачи все тесты должны прогоняться за 2 секунды>>891806BangPatterns ничего не меняют, пытаюсь разобраться с ST монадой. Я правильно понимаю что мне надо поменять State (IntMap) на State(STArray) и написать еще один метод, который будет обновлять значения в этом STArray?
>>892157>Кстати по условию задачи все тесты должны прогоняться за 2 секундыВсе или каждый?
>>892176вроде как все, по крайней мере остальные две задачи получилось решить так, что бы за указанное время прогонялись все тесты
>>892181Но ведь ты сдал вариант на хаскеле, который работает 6 секунд, хотя надо 2.
>>892182нет еще, я только сегодня третью сделал и надо сначала курс оплатитьВообще я собираюсь в скалу вкатываться (с языком знаком + есть небольшой pet-проект), и думал поделать эти задачки чтобы разобраться в чисто-функциональном подходе и лучше применять его на практике. Но пока это больше похоже на преодолевание искусственно созданных трудностей, чем на что-то действительно полезное. И собственно вопрос - стоит ли продолжать, или это изначально бессмысленная затея?
>>892187Решение на haskell: 12 строкРешение на педоне: 31 строкаправда, в Haskell MultiMap используется
>>892188Ну пока лучшее решение на хаскелле - 25 строк. Насколько я понимаю узкое место там как раз IntMap с logn временем на поиск и добавление элементов, то есть надо переделывать на основе изменяемых массивов, а то что я пока нагуглил на эту тему выглядит как пиздец
>>8921904.5 секунды
>>892250Ну и императивная дрисня получилась, однако.
>>892255Чуток быстрее (4.2-4.3 сек), из-за отсутствия лишних преобразований.А может из-за хипстерского Атома.
>>892188Решение на педоне: сажает робота на марсРешение на haskell: взрывается на старте из-за несоответствия временным критериямЗато на пять строчек короче!
>>892333>Real Time системы>ПиздонМда, кек, что ещё скажешь?
>>892333> несоответствия временным критериямТому херу конечно виднее, но лично я сомневаюсь насчёт трёх секунд на все тесты.3 секунды на 1 тест. Всё в порядке.
>>892340Passing a code problem requires implementing a solution that passes all the tests for this problemin the grader and does so under the time and memory limits specified in the problem statement.
>>892355В задании приводятся Constraints и TIme Limits, но не приводится число тестов.Значит это Time Limits для данных Constraints.> passes all the tests for this problemin the grader and does so under the time and memory limits specified in the problem statement.Ну да. А specified было так, как я описал выше.Слюшай, думаешь, я не сидел в подобных решалках задач? Сидел (но немного, т.к. в моё время на выбор давались C++ и Pascal, а это уныло). Везде подразумевалось время на решение для одного примера входных данныхКстати, на скрине время для какого языка и варианта?
>>892370а может ты и прав... на скрине - питон, код выше кидал
>>892384https://cpy.pt/Hpdz9amL вот хачкель, последний вариант
>>892384>а может ты и прав... Нет, ну сможешь создать условия, при которых каждый тест укладывается в ограничения, а в сумме они не укладываются и система зарежектит такой вариант, то ок.Но это крайне маловероятно. Сегодня набор тестов один, завтра — другой. Ограничения на время указывают для ограничений на размер входных данных.
В чем разница между выражением и лямбда функцией? Если опустить технические детали это же одно и тоже?Зы. Читаю книгу по лиспу какого-то финна
>>892157>для линукса - выше скриптик был,Покажи. Либо его нету либо я долблюсь в глаза
>>892408https://cpy.pt/Y1R263zgесли одну строчку сверху можно назвать "скриптиком"
>>892399> 2016> lispLisp способен даже C++ оставить далеко позади в соревновании по написанию неподдерживаемого кода.
Просто оставлю это здесь.
>>892317Напейсал на цепепе.0.45-0.55 с. на все тесты.Кек.
>>892842Вот код
>>892874Ну молодец. Цель то была на хаскелле написать
>>893032уже написал >>892317
>>893044Трай зис. У меня на всех тестах достаточно быстро выполняется.
>>893122Скидывай сорцы уж. У меня OCR нет.
>>893132http://pastebin.com/MN5Dv17Q
>>893122Ну заранее могу пованговать. Твой вариант похож на мой код с массивами, только у тебя Map, т.е. доступ к элементам заведомо медленнее.
>>8931227.1-7.2 секундчуть быстрее чем >>891585и медленнее массивов >>892317, как я и ванговал
>>893135Вот только например на 20 тесте твой массив будет иметь 100000 элеметов, а мой мап всего 2. Аналогично на других тестах, мап будет содержать не так много элементов, как кажется - только для уникальных узлов
Вообще в IRC мне посоветовали STUArray заменить на https://hackage.haskell.org/package/vectorПомимо прочих ништяков, он Foldable, т.е. для нахождения максимума не нужно перегонять его в список.Как мне кажется, отчего Хаксель больше страдает, это от переупаковок данных туда-сюда. Из строки в список чисел, из списка чисел в массив, анбоксинг, боксинг Int-ов, опять превращение в список и т.д. Создание списка для mapM_, только для того, чтобы вызвать функцию для каждого номера вершины.
>>893144>Вот только например на 20 тесте твой массив будет иметь 100000 элеметов, а мой мап всего 2.И всё равно работает медленнее.Array выделяется 1 раз и хранит unboxed Int-ы (если это STUArray/IOUArray; U = Unboxed). А Map зделан поверх дерева, при доступе и добавлении куча сравнений и хождения по указателям.
>>893144Как-то странно экономить память на массиве, когда создаётся несколько списков, длина которых линейна от числа вершин.
>>893152>Как мне кажется, отчего Хаксель больше страдает, это от переупаковок данных туда-сюда. Хотя нет, даже не от этого. От нестрогости. Для того, чтобы найти высоту дерева, нужно узнать высоты ВСЕХ поддеревьев. Т.е. задача сама по себе "энергичная". И нестрогий язык заведомо проиграет, т.к. будет бесполезно тратить время на создание thunk-ов, которые всё равно все будут вычислены.
>>893181BangPatterns же должны от этого спасать?
>>893157Ладно, уговорил. Давай так тогдаhttp://pastebin.com/q03JXZ19
>>893203Ошибся. Вот так правильноhttp://pastebin.com/yRkPrQqr
>>893214Вау, всего лишь в 10 раз медленнее лиспа.
>>893262Пруф?
>>893299А ты сомневаешься что ли?
>>893318Хм, то есть вариант с асс. массивом за 7.1-7.2 сек отрабатывал, а вариант с линейным массивом за 30?
>>893335У того анона эвм явно помощнее была.
>>893335Эта версия >>893134 у меня за 52.7сек отрабатывает.
>>893337А я то думал ты он и есть. Вообще надо на Unboxеd массивы переписать, они побыстрее должны быть.
>>893340Ну тащемта выигрыш от массивов все-таки есть. И че там на лиспе получилось?
>>893342http://paste.lisp.org/display/333925
>>893356>)))))))Слишком экстремально для меня.
>>893359Зато более практичный и удобный для разработки.Хаскел же годится только для изъебств типа пикрелейтед.
>>893335Он явно не включал оптимизации.
>>893262Если даже медленнее питухона, то явно медленнее лишпа. Никто не сомневался.
>>893356>>892427
>>893405Ты явно не смотрел скриншот.
>>893410kkЗначит показал не весь код на лишпе. Наверняка там в первой строке (declaim (optimize (speed 3) (safety 0) (debug 0)))
>>893318Замерь цепепе у себяhttps://cpy.pt/m4QQ7S8W
>>893411Весь. declare было в tree-height, но оно даёт ускорения на ~0.2-0.3сек, поэтому и убрал>>893412
>>893413Что у тебя за спеки, если всё так тормозит?
>>893415атом, которому уже почти с десяток лет
>>893416Ну, в принципе, отношение скоростей кода на Haskell к коду на C++ у тебя более-менее близко к моему.
>>893262>Вау, всего лишь в 10 раз медленнее лиспа.Ты, конечно, сравнил.Haskell функциональный, Lisp императивный.
Хули не перекатываетесь?
>>893449Лень.
>>893459Пидоры.
>>893424Во-первых, не императивный, а мультипарадигменный, во-вторых, дело не в этом.
>>893449Сам и перекати
>>893911Главное, что не функциональный.http://lispnik.livejournal.com/130098.html?thread=398898#t398898
>>893912Я не оп же.
>>894025Перекатишь — станешь.
>>894549Я боюсь. Вдруг накосячу.
>>894014Не __чисто__функциональный. Чуешь разницу?
>>894784Под не __чисто__ функциональный можно подвести что угодно.
>>894822Все не __чисто__ функциональные языки являются __чисто__ мультипарадигменными
>>894833>мультипарадигменнымиНичего не значащий баззворд. Типа "гибридное ядро" и т.п.
ПЕРЕКОТ в тред >>894904 (OP)