Этого треда уже нет.
Это копия, сохраненная 30 июня 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
#2 #419861
>>419852

> Всякие скалы-кложи времени на обучение потребуют больше, а профита кроме "выразительности кода" не дадут.


Не знаю насчёт скалы, но иммутабельность и транзакционность структур данных в Clojure дают распараллеливание for free.
Более того, лучше язык — лучше код — меньше ошибок. Чем это не аргумент в пользу более совершенных языков?
25 Кб, 600x450
#3 #419863
Есть ли в вашем хаскеле какое-то подобие npm?
Так, чтобы зависимости ставились локально.
А то давеча ставил пандок с помощью cabal, умер от dependency hell.
#4 #419871
>>419863

> Есть ли в вашем хаскеле какое-то подобие npm


Хипстеры унижают илитку в собственном треде
#6 #419922
>>419892
Сенечка, иди нахуй.
3 Кб, 147x211
sage #7 #419923
#8 #419979
>>419863
двачую вопрос, это походу самое больное место хаскеля
#9 #420131
>>419863
Бамп.
#10 #420155
Кабал это пиздец говно на 200 метро непонятной кривой хуйни.
#11 #420172
Надо запилить свой менеджер пакетов.
sage #12 #420173
>>420172
да нахер он нужен
#13 #420215
>>419863
Что блять значит локально, а они у тебя где поставились? Что бы не было ада пользуй сендбоксы, они пока не вышли но это же Хачкель, что ты ожидал?
#14 #420222
>>420215

>Что блять значит локально, а они у тебя где поставились?


Поставились куда-то в ~/.cabal.
Локально значит в директорию с проектом. Нужна пакету версия 3.14 - поставится 3.14, даже если другой части проекта нужен 3.15 (будет две версии).
#15 #420252
>>420222
Ебанько штоле?
cabal sandbox init в какой-то папке
cabal install huy устанавливает huy в этой папке
#16 #422164
>>419863
вот тут ребята обещают cabal hell разрулить
#18 #422250
Как заебашить глобальное
x <- somethink
А то я заебался передавать по цепочке функций x, только потому что он нужен только в последней из них.
А если их с десяток?
#19 #422251
>>422250
function1 x =
...[.....]
....where
...........function2 = ......
...........function3 = ......
...........function4 = ......
...........function5 = ......
...........function6 = ......
...........function7 = uses x
#20 #422272
>>422251
А мне надо

x <- getConfig

main = do
...n<-etc
...functuion n ass
......where
.........ass = doSomethinkWith x

Как то так
#21 #422274
>>422272
func2 = doSomethinkWith x

main = do
...x <- getConf
...func
#22 #422276
>>422272
Тогда эту n тоже в where добавь.
sage #23 #422279
>>422272
{-# NOINLINE x #-}
x = unsafePerformIO getConfig

алсо нахер иди
#24 #422282
>>422276
Там ошибка смотри >>422274
т.е. грубо говоря, мне нужно получить например, конфиг и использовать его потом в одной из функций не передавая его туда. Хотя пишу сейчас и понимаю, что это нарушает чистоту языка.
#25 #422283
>>422279
Сам иди. Я тут глобальную переменую придумал.
#26 #422285
>>422282

main = do
...x <- getConf
...func2
...where
.........func2 = doSomethinkWith x
sage #27 #422286
>>422285
>>422283
пиздец какой
#28 #422289
>>422285
Ты меня не понял.
Ну и хрен с ним, я все равно неправ был.

Расскажите лучше как в async данными между потоками обмениваться? Своими словами, документацию я и сам почитать могу.
#29 #422342
Посоветуйте библиотеку для отправки get запросов, скачивания файлов сразу в ByteString, которая поддерживает BasicAuth. С меня как обычно.
#30 #422935
putAll conn = mapM_ (put conn . (&&&) (fromJust . newImage) idObj) objects

Исправил warnings компилятора, теперь не понимаю что это.
#31 #423103
Дайте какую-нть брошурку по штанге, чтобы коротко и без воды. Я начал читать на викибукс - там сполошное графоманство.

Что-нибудь из серии не для чайников, ибо я уже немного шарю в фп (правда с динамической типезацией, лал: схема, кложура, эрланг)
#32 #423104
>>423103
Типизацией, блять. Стыдно. Но я с телефона.
#33 #423124
#34 #423235
>>419863
cabal sandbox?
#35 #423245
>>419858
Java-господин, заглядывает в эту петушиную хату. Порог не переступает что бы не зашквариться, и кричит "Зачем нужен ваш санный Haskell? Где его вообще применяют, кроме мозгового онанизма?".
#36 #423282
>>423245
элемент в массиве уже нашёл?
#37 #423286
>>423245
Чтобы чмырить сотрудников, когда они говорят, что джава охуенный язык.
#38 #423295
- Одну минуту, - громко произнес Стасик, - прежде чем продемонстрировать вам способ поедания борща, о котором все вы, как будто, позабыли, я должен опорожнить свой кишечник.
Вот каким образом развратник приступил к омерзительной операции. Его окружили четверо хаскель-ганимедов: один держал наготове большой ночной горшок, второй взял зажженную свечу и подставил ее поближе к анусу, чтобы было лучше видно происходящее, третий сосал ему член, четвертый, перекинув через руку белоснежное полотенце, целовал Стасика в губы. Тот, опершись еще на двоих педерастов, поднатужился, и как только появилось невероятное количество дерьма, которое обыкновенно и регулярно выдавал хозяин замка, учитывая страшное количество поглощаемой им пищи, тот юноша, что держал вазу, принялся восхвалять экскременты. "Какое прекрасное хаскель-дерьмо! - восклицал он. - Ах, господин мой, какое превосходное хаскель-говно! Как красиво вы испражняетесь".
Когда дифирамбы закончились, педераст, вооруженный салфеткой, языком очистил преддверие ануса, а горшечник подставил содержимое горшка под нос Стасику и опять громогласно восхвалял его. После этого мощная струя мочи ударила в рот сосателю, который тут же проглотил всю жидкость, полотенце завершило то, что не мог сделать язык, и четверо ганимедов, оставшись без дела, долго сосали поочередно язык, фаллос и задний проход распутника.
#39 #423299
>>423286
Но ведь ахуенный же.
>>423282
Да.
#40 #423302
>>423299

>Да.


С помощью знаменитого джява-паттерна najtiElementVMassive, я надеюсь?
Как только перепишешь его так, чтоб он занимал не больше 10 строк кода - приходи.
#41 #423307
>>423302
Сразу же после того, как ты напишешь квиксорт, который
а) будет в функциональном стиле
б) короче, чем он же на крестах
в) не будет отсасывать у пузырька, написанного восьмиклассником на сишке.
#42 #423322
>>423302
хуйню не неси, когда ваша махаркайка обзаведется нормальной средой программирования и набором библиотек тогда по кукарекай петушок. А то что в вашей параше можно написать пару алгоритмов короче чем в джаве не аргумент.
#43 #423323
>>423322
Набор библиотек есть. Насчет IDE не всё так однозначно. На каком-нибудь питоне вполне нормально всё пишется без неё, в чем-то вроде саблайма. На джаве же уже как-то так сложилось что жирная IDE must have.
#44 #423329
>>423299

> ахуенный же.


http://соснули.рф/
Как только выучишь наизусть, разберешься, что уже пофиксиили - приходи.
#45 #423362
Алсо вот вам IDE
https://www.fpcomplete.com/business/haskell-center/overview/
Онлайн-онли, да.
#46 #423377
Как узнать какие типы Exception возможны в определенной функции?
#47 #423383
>>423302

>не больше 10 строк кода


Ох лол нет ничего тупеее чем дрочь на строчки. Из-за таких даунов считается нормой писать ебучие однострочники с дублями в трех местах. Даже в няшном шарпике теперь стрелочками в жопу ебутся.
#48 #423464
>>422279
А могли бы про ReaderT посоветовать почитать. Какой то бесполезный у вас ресурс.
#49 #423493
>>423383
не передергивай.
#50 #423554
>>423245
Как я полагаю, ты по старой памяти пришёл сюда за тугой струёй элитной урины в ебало, но во-первых, претензионность в этом году не в моде, во-вторых хаскель элита покинула борды, и только Стасик иногда мелькает. Сидят тута одни нюфаги и слоупоки, которые тебе нихуя не пояснят.

мимо
#51 #423598
А где сейчас обитает хаскель элита?
мимоньюфаг
#52 #423619
>>423598
В силу сверхвысокого чсв они отталкиваются в разные уголки интернета.
#53 #423628
>>423619

> хаскель элита


Не знаю как все, и вряд ли ко мне это относится, но раньше я любил участвовать в таких тредах, а потом меня просто заебал весь этот хаскель, программирование, плт. Просто не возбуждает, не вводит в изменённое маниакальное состояние сознания, как когда-то. Спорить и что-то доказывать лень, потому что абсолютно похуй что там какие-то долбоёбы себе думают и как они относятся к хаскелу и тд. Захожу в пр изредка, и с угасающей надеждой, что как-нибудь снова торкнет.
#54 #423631
>>423628
А зачем спорить? Лучше отвечай на вопросы ньюфагов и слоупоков.

Вот мне, например, надо узнать какие типы исключений используются в пакете HTTP, чтобы не парсить их подобным образом
https://programmers.stackexchange.com/questions/250941/how-do-you-handle-specific-networking-exceptions-in-haskell

В исходниках HTTP ничего не нашел. Вот ты знаешь как определить какие типы там используются?
#55 #423650
>>423631
Там треш какой-то:
https://github.com/haskell/HTTP/blob/master/Network/HTTP.hs#L159
https://github.com/haskell/HTTP/blob/master/Network/Stream.hs#L37
https://github.com/haskell/HTTP/blob/master/Network/HTTP.hs#L205
http://hackage.haskell.org/package/base-4.7.0.2/docs/Prelude.html#v:fail
Хаскель не для этого, писал бы на скале лучше. Но если всё-равно хочешь, то по прикладным вопросам лучше всего спрашивать в #haskell (irc.freenode.net). Прямо сейчас в конфочке 1476 человек.
#56 #423653
>>423650
А ведь и правда треш.

>Хаскель не для этого, писал бы на скале лучше.


А для чего тогда Хаскель? в третий раз на борде спрашиваю
И чем скала лучше хаскеля?
#57 #423654
>>423650
И спасибо за ответ, сам не смог как то найти.
#58 #423659
>>423653

> А для чего тогда Хаскель?


Для того, чтобы экспериментировать с архитектурными решениями, стающими возможными благодаря таким-то и таким-то фишечкам системы типов: тайпклассопедия, прочие braided категории, линзы, и всякие пруф-оф-концепты поверх этого.
#59 #423661
>>423653

> И чем скала лучше хаскеля?


Конкретно в этом вопросе, тем, что там монадическая обработка ошибок построена как овеществлятор существующих джавовских эксепшнов и такой хуйни как в хаскельном http в библиотеках не встретишь.
http://danielwestheide.com/blog/2012/12/26/the-neophytes-guide-to-scala-part-6-error-handling-with-try.html
http://www.scala-lang.org/files/archive/nightly/docs/library/index.html#scala.util.Try
#61 #423719
>>423650
А есть что-то такое же модное, как скала, но чтобы компилировалось в нейтив?
#62 #423720
>>423719
Раст.
#63 #423726
>>423719
А еще чтоб чистый, функционалиный, ленивый
ibn4: Haskell
#64 #423736
>>423720
Расту до Скалы и Хаскеля как до луны. Это неплохая замена С/С++/D, но не надо думать, что он где-то рядом с двумя из предыдущего предложения. Я бы сказал, он с похожими ценностями, но в своей области (байтоблядство), и область эта накладывает серьёзные ограничения на абстракцию, выразительность и тд. Кстати, Раст сложноват. Особенно писать на нём алгоритмы и структуры данных с обратными ссылками. Вся эта линейная типизация борровинга указателей, все эти лайфтаймы - иногда это превращается в развлечение аля Агда/Кок.
#65 #423741
>>423736
Ну тогда окамль.
688 Кб, 1863x1087
#66 #423783
Кто знает, может быть Стасик взрастит здесь новое поколение истинных борщеедов.
#67 #423787
>>423783
нет. как только борщеед получает от мамки говноподелку на андроиде, он ощущает, что даже ЭТО роскошь, по сравнению с его жалким существованием борщееда. и после этого он начинает учить какое-то говно, что бы зарабатывать денюжку и съебаться с под мамкиной юбки
#68 #423790
>>423787
лучше умереть с голоду, но остаться господином
#69 #423797
>>423741
Окамль классный. Та же скала, но без жвм, в чём-то чище и выразительнее, в чём-то хуже (имплиситов пока нет, например). SML c расширениями тоже хороши и ум в порядок приводят.
Харпер вот пытается как-то поддерживать движуху:
http://sml-family.org/
https://github.com/SMLFamily
#70 #423861
>>423797
ocaml has no concurrency
sage #71 #423970
Сколько там уже Хассл существует? 25 лет? И спустя 25 лет его апологеты должны что-то доказывать, что IDE есть инбифо Лекса, что проекты есть, что применение есть. Думаю, есть только повод задуматься.
#72 #424054
Haskell не для применения, хотя может в него. Его сделали прикладным только для того, чтобы увидеть, что это может работать, для экспериментирования, ну и для привлечения народу за пределами академ тусовки. В остальном же Haskell отличается от Java или C++, как системная математика от прикладной. То есть, если нужно прикладывать язык для решения задачек под водочку и картофанчик, ни о чём лишнем не задумываясь, то Haskell - однозначно неподходящий выбор. Это язык для тех кто желает потеоретизировать, пообобщать, посистематизировать, провести связи с математикой и понять на фундаментальном уровне о чём всё программирование. Очевидно, что такая аудитория не особо печётся о наличие IDE и удобного пакет менеджера; можно было бы держать тайпчекер в голове, большинство хаскелистов обошлись бы листиком и ручкой.
#73 #424287
Оставлю ссылочку на новый годный русскоязычный ресурс
http://haskell.dshevchenko.biz/
#74 #424299
>>424287

>biz


уёбыва и бизнесмена своего забери, вся годнота по хаскелю лежит на доменах .borsh
#75 #424313
>>424299
Скоро переедет на haskell.ru же.
#76 #424453
>>419858
Шел 2015 год. На Хаскеле по-прежнему написано нихуя. Иначе и быть не может.
#77 #424454
>>424453
Как что-то плохое.
#78 #424495
>>424454
Языки не для того, чтобы на них писать!
#79 #424501
>>424495

>Хачкель не для того, чтобы на нём писать!


фикс
#80 #424533
>>424495
Haskell для удовлетворения эстетических потребностей. Бездушно писать программки под водочку и картофанчик можно и на C++ или другом языке рабов.
#81 #424634
Почему у есода такой латенси в этом бенчмарке?
https://www.techempower.com/benchmarks/#section=data-r9&hw=ec2&test=query
#82 #424661
>>424634
Там у них два есода, один норм, второй какой-то тормозной.
#83 #424701
>>419858
ну и зачем етот ваш хаскиль, если монады даже в php можно сделать?
http://habrahabr.ru/post/231801/
#84 #424787
>>424701

>пиздишь такой монады из хашкеля


>рассказываешь пацанам, какой он ненужный

#85 #425132
>>424313 Pereehal na ruhaskell.org. Vstupaite i compiliruite.
22 Кб, 474x332
#86 #425141
#87 #425769
Как создать строгий поле в своем типе данных?
sage #88 #425838
>>425769
data X = X !Y
sage #89 #426424
>>419871

>Борщехлеб


>Илитка



Да вы ебанулись.
60 Кб, 604x453
#90 #426447
Борщ. Накидайте успешных историй применения хаскеля/других функциональных языков.
У меня есть одна:
http://habrahabr.ru/post/134432/
Ебанутая задача, решенная ебанутым методом, но хуй знает, насколько реально решить ее каким-то другим
61 Кб, 682x600
#91 #426560
>>426447

>хаскель на микроконтроллере


>успешная история

#92 #426575
>>426447

>Задача, на первый взгляд, простая: на каждый запрос на чтение блока (команду SCSI) отдаем содержимое этого блока. Блок может либо принадлежать какому-нибудь из «файлов», либо содержать служебную информацию FAT.


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



>Задача, на первый взгляд, простая: перейти дорогу.


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

#93 #426784
>>426575
Расскажите о Best Practices обработки исключений. Где их ставить обработчики в месте где они возникают, или где нибудь в main?
#94 #429270
>>419858
Антуаны, почему не создать общий около-FL тред, чтобы в кучу все эти ваши хасколы, окамлы-фшарпы, кложуры и прочие немерли с скалы?

А то утомительно, полтора анона на всю ветку. А задачи все решают похожие.

В качестве бонуса: срач какой из функциональных языков функциональнее.
sage #95 #429323
>>429270
может еще и лисподебилами в одном треде сидеть?
#96 #429419
>>429323

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


А то!
#97 #429519
Обьясните ньюфагу: в чём проблема неприменимости хачкеля?
#98 #429522
>>429519
Хачкель - это функция акермана от крестов. Там где в крестах сборник велосипедов на уровне кода, максимум на уровне композиции классов в хачкеле велики начинаются на концептуальном уровне (благо язык позволяет). Велосипеды же рождают велосипеды, поэтому писать компьютерные программы на хачкеле сложнее, хотя наверное гораздо веселее.
#99 #429525
>>429522
Это плохое обьяснение, оно ничего не обьясняет.
#100 #429527
>>429525
Ну как тебе по-другому сказать? Дикая концептуальная и парадигменная фрагментация сообщества и кодовой базы - проблема применимости хачкеля.
25 Кб, 409x256
#101 #429560
Ocaml-треда не нашел, поэтому спрошу здесь.
Возможно ли реализовать функцию from_list для пикрелейтед модуля?
Пробовал так:
let rec from_list: type a b. a list -> b t = function
| [] -> Nil
| x::xs -> Cons(x, from_list xs)
но компилятор ругается, что this expression has type List.zero List.t
but an expression was expected of type b List.t
Type List.zero is not compatible with type b
sage #102 #429565
>>429560
код нормально скинь же
ideone.com
#104 #429574
>>429560
Я тут подумал: наверное, всё-таки нельзя, т.к. тип можно будет узнать только в рантайме, а типизация-то статическая.
sage #105 #429869
>>429527
Хуйню какую то сказал
Аноним #106 #430110
Java:
elemIndex

Haskell:
static int najtiElementVMassive(Object massiv,Object element){
\t\tif(massiv instanceof int[]) {
\t\t\tfor(int i=0; i<((int[])massiv).length; ++i)
\t\t\t\tif(((int[])massiv)==(int)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof byte[]) {
\t\t\tfor(int i=0; i<((byte[])massiv).length; ++i)
\t\t\t\tif(((byte[])massiv)==(byte)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof boolean[]) {
\t\t\tfor(int i=0; i<((boolean[])massiv).length; ++i)
\t\t\t\tif(((boolean[])massiv)==(boolean)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof char[]) {
\t\t\tfor(int i=0; i<((char[])massiv).length; ++i)
\t\t\t\tif(((char[])massiv)==(char)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof float[]) {
\t\t\tfor(int i=0; i<((float[])massiv).length; ++i)
\t\t\t\tif(((float[])massiv)==(float)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof double[]) {
\t\t\tfor(int i=0; i<((double[])massiv).length; ++i)
\t\t\t\tif(((double[])massiv)==(double)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof short[]) {
\t\t\tfor(int i=0; i<((short[])massiv).length; ++i)
\t\t\t\tif(((short[])massiv)==(short)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof long[]) {
\t\t\tfor(int i=0; i<((long[])massiv).length; ++i)
\t\t\t\tif(((long[])massiv)==(long)element)
\t\t\t\t\treturn i;
\t\t} else {
\t\t\ttry {
\t\t\t\tfor(int i=0; i<((Object[])massiv).length; ++i)
\t\t\t\t\tif(sravnitMassivi(((Object[])massiv),element))
\t\t\t\t\t\treturn i;
\t\t\t} catch (Exception e) {
\t\t\t\tfor(int i=0; i<((Object[])massiv).length; ++i)
\t\t\t\t\tif((((Object[])massiv)).equals(element))
\t\t\t\t\t\treturn i;
\t\t\t}
\t\t}
\t\t
\t\treturn -1;
\t}
\t
\t
\tstatic boolean sravnitMassivi(Object massiv1,Object massiv2) {
\t\ttry {
\t\t\tif((((Object[])massiv1)).length!=(((Object[])massiv1)).length) return false;
\t\t\tboolean ravni=true;
\t\t\tfor(int i=0; i<(((Object[])massiv1)).length; ++i)
\t\t\t\travni=ravni&&sravnitMassivi((((Object[])massiv1)),(((Object[])massiv2)));
\t\t\treturn ravni;
\t\t} catch (Exception e) {
\t\t\tif(massiv1 instanceof int[]) {
\t\t\t\treturn Arrays.equals((int[])massiv1,(int[])massiv2);
\t\t\t} else if(massiv1 instanceof byte[]) {
\t\t\t\treturn Arrays.equals((byte[])massiv1,(byte[])massiv2);
\t\t\t} else if(massiv1 instanceof boolean[]) {
\t\t\t\treturn Arrays.equals((boolean[])massiv1,(boolean[])massiv2);
\t\t\t} else if(massiv1 instanceof char[]) {
\t\t\t\treturn Arrays.equals((char[])massiv1,(char[])massiv2);
\t\t\t} else if(massiv1 instanceof float[]) {
\t\t\t\treturn Arrays.equals((float[])massiv1,(float[])massiv2);
\t\t\t} else if(massiv1 instanceof double[]) {
\t\t\t\treturn Arrays.equals((double[])massiv1,(double[])massiv2);
\t\t\t} else if(massiv1 instanceof short[]) {
\t\t\t\treturn Arrays.equals((short[])massiv1,(short[])massiv2);
\t\t\t} else if(massiv1 instanceof long[]) {
\t\t\t\treturn Arrays.equals((long[])massiv1,(long[])massiv2);
\t\t\t} else {
\t\t\t\treturn massiv1.equals(massiv2);
\t\t\t}
\t\t}
\t}
Аноним #106 #430110
Java:
elemIndex

Haskell:
static int najtiElementVMassive(Object massiv,Object element){
\t\tif(massiv instanceof int[]) {
\t\t\tfor(int i=0; i<((int[])massiv).length; ++i)
\t\t\t\tif(((int[])massiv)==(int)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof byte[]) {
\t\t\tfor(int i=0; i<((byte[])massiv).length; ++i)
\t\t\t\tif(((byte[])massiv)==(byte)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof boolean[]) {
\t\t\tfor(int i=0; i<((boolean[])massiv).length; ++i)
\t\t\t\tif(((boolean[])massiv)==(boolean)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof char[]) {
\t\t\tfor(int i=0; i<((char[])massiv).length; ++i)
\t\t\t\tif(((char[])massiv)==(char)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof float[]) {
\t\t\tfor(int i=0; i<((float[])massiv).length; ++i)
\t\t\t\tif(((float[])massiv)==(float)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof double[]) {
\t\t\tfor(int i=0; i<((double[])massiv).length; ++i)
\t\t\t\tif(((double[])massiv)==(double)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof short[]) {
\t\t\tfor(int i=0; i<((short[])massiv).length; ++i)
\t\t\t\tif(((short[])massiv)==(short)element)
\t\t\t\t\treturn i;
\t\t} else if(massiv instanceof long[]) {
\t\t\tfor(int i=0; i<((long[])massiv).length; ++i)
\t\t\t\tif(((long[])massiv)==(long)element)
\t\t\t\t\treturn i;
\t\t} else {
\t\t\ttry {
\t\t\t\tfor(int i=0; i<((Object[])massiv).length; ++i)
\t\t\t\t\tif(sravnitMassivi(((Object[])massiv),element))
\t\t\t\t\t\treturn i;
\t\t\t} catch (Exception e) {
\t\t\t\tfor(int i=0; i<((Object[])massiv).length; ++i)
\t\t\t\t\tif((((Object[])massiv)).equals(element))
\t\t\t\t\t\treturn i;
\t\t\t}
\t\t}
\t\t
\t\treturn -1;
\t}
\t
\t
\tstatic boolean sravnitMassivi(Object massiv1,Object massiv2) {
\t\ttry {
\t\t\tif((((Object[])massiv1)).length!=(((Object[])massiv1)).length) return false;
\t\t\tboolean ravni=true;
\t\t\tfor(int i=0; i<(((Object[])massiv1)).length; ++i)
\t\t\t\travni=ravni&&sravnitMassivi((((Object[])massiv1)),(((Object[])massiv2)));
\t\t\treturn ravni;
\t\t} catch (Exception e) {
\t\t\tif(massiv1 instanceof int[]) {
\t\t\t\treturn Arrays.equals((int[])massiv1,(int[])massiv2);
\t\t\t} else if(massiv1 instanceof byte[]) {
\t\t\t\treturn Arrays.equals((byte[])massiv1,(byte[])massiv2);
\t\t\t} else if(massiv1 instanceof boolean[]) {
\t\t\t\treturn Arrays.equals((boolean[])massiv1,(boolean[])massiv2);
\t\t\t} else if(massiv1 instanceof char[]) {
\t\t\t\treturn Arrays.equals((char[])massiv1,(char[])massiv2);
\t\t\t} else if(massiv1 instanceof float[]) {
\t\t\t\treturn Arrays.equals((float[])massiv1,(float[])massiv2);
\t\t\t} else if(massiv1 instanceof double[]) {
\t\t\t\treturn Arrays.equals((double[])massiv1,(double[])massiv2);
\t\t\t} else if(massiv1 instanceof short[]) {
\t\t\t\treturn Arrays.equals((short[])massiv1,(short[])massiv2);
\t\t\t} else if(massiv1 instanceof long[]) {
\t\t\t\treturn Arrays.equals((long[])massiv1,(long[])massiv2);
\t\t\t} else {
\t\t\t\treturn massiv1.equals(massiv2);
\t\t\t}
\t\t}
\t}
#107 #430444
>>430110
Но в Хаскеле нет массивов
#108 #430452
>>429519
Сортировку сложно написать. Монады слишком абстрактные чтобы понять.
#109 #430491
>>429869
Тебе наверное так кажется, потому что ты хачкелист. Попробуй очистить разум и подумать об этом с белого листа.
38 Кб, 550x412
#110 #430492
>>430110

> сравнивает вызов и реализацию

Аноним #111 #430554
тожемне, "строгая статическая типизация"
http://ideone.com/9U2o83
отсос так отсооос!
#112 #430576
>>429869
Достаточно вспомнить, что подходов к обработке ошибок в хаскеле пожалуй даже больше, чем реализаций умных указателей в С++.
#113 #430626
>>430554

>NoMonomorphismRestriction


Ох ю!
#114 #430653
>>430576
Вот это напрягает, согласен. Что бы не придумал, все время получается кривой велосипед.
#115 #430759
>>430554
Вывод типов же. идиот
sage #117 #430899
>>430807
Но в то же время

http://ideone.com/vwuxrT

СЕМЕНТИКА ХАСКЕЛЯ ЗАВИСИТ ОТ БУКОВ АЛФАВИТА
Аноним #118 #430958
>>430899
смешание чисто-императивного подхода (и динамической типизации) с ленивой семантикой приводит к таким вот аномалиям
неудивительно что на этом языке никто не программирует
sage #119 #431003
>>430958
Слишком толсто
#120 #431304
>>430807
>>430899
Стоит попробовать еще (p,р), (к,k), (B,В) тебя ждет еще больше интересных открытий.
300 Кб, 1920x1200
#121 #433200
57 Кб, 612x320
#122 #433778
Посоны, вы только поглядите на этот знатный крестоотсос!
#123 #433780
>>433778
И что это?
#124 #433783
>>433778

>крестоотсос


>Memory


>Java 29104


>C++ 872


>крестоотсос

#125 #433784
>>433783
Жирный рантайм JVM-же.
Но вообще я про то, что цпп медленнее 3х вариантов на хаскеле.
#126 #433787
>>433778
Что за ебанатизм, что за задача что джява обогнала няшную, хаскель фортран, а гопараша аж на 3 месте. Олсо тут следует заметить что крестокод только на одном ядре выполнялся.

>>433783
Кого вообще волнует память, пиздос.
#127 #433788
>>433778

>сравнивает многопоточную программу с однопоточной


Ясно.
#128 #433790
>>433788
Щито поделать, если крестомакаки не сумели многопоточную версию запилить?
Алсо, однопоточный вариант на хаскеле възебывает сипипи.
#129 #433791
>>433778
А ну да, фортран тоже на одном ядре. Но всё равно, всем известно что сишный код даже на одном ядре рвёт всякую новомодную многопоточную парашу, а тут вроде многопоточный код на сишке, хоть и хуёво написаный (одно ядро недогруз), проёбывает яваговну. Кажется мне, что тест говно. Есть исходники?
#131 #433793
>>433790
Блять, а на сишке он сам распараллелился штоли? Просто так написали (ногами).
#132 #433800
Rust, кстати, шустрым становится, что не может не радовать.
#133 #433808
В очередной раз убедился что бенчмарксгейз это в первую очередь рекламный продукт.
#134 #433814
>>433808

>ВРЁТИ

#135 #433815
std::array<char, 288> alu =
{
"GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"
"GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"
"CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"
"ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"
"GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"
"AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"
"AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
};

Бред какой-то, наверняка задача оптимизирована под язык.
#136 #433819
>>433815
Ага, жидорептилоиды проталкивают хаскиль в массы.
#137 #433824
>>433815

> задача оптимизирована под язык.


интересно, какие методы позволяют заточить задачу под перл или другой конкретный язык. Имеется в виду производительность.
sage #140 #433919
>>433917
кекович
#141 #434050
>>433778

>java = 1.73


>C++ = 4.22/3 = 1.4


Не вижу атсоса.
#142 #434105
>>434050
Хули ты там делишь, дурак? Кто виноват что кресты - это перделка для студентов, которая не может в многопоточность.
#143 #434112
>>434050
Глупый плюсоёб, глупый. Там столбец CPU Secs, мог бы по нему сравнить.
Тогда бы ты, наверное, заметил, что две версии на хаскеле (однопоточная и плохораспараллеленая) всё равно взъёбывают версии на крестах.
#144 #434114
>>434105
Кресты - мощный инструмент для профессионалов, а не студентов, которые не могут в многопоток.

>>434112
Похуй на хаскель, я с явой сравниваю.
#145 #434116
>>434114

>Похуй на хаскель, я с явой сравниваю.


Тогда ладно.
#146 #434143
>>434114

>Кресты - мощный инструмент для профессионалов



Проиграл на всю хату.
#147 #434185
>>434114

>Кресты - мощный инструмент для профессионалов, а не студентов, которые не могут в многопоток.


Лол, немного поменять порядок слов, и вскукарек фанбоя станет больше похож на правду:

>Кресты - мощный инструмент для студентов и непрофессионалов, которые не могут в многопоток.

#148 #434370
>>434114
Аппликативные функторы-то завезли?
#149 #435235
>>419858
Всё сидите тута без линейных линейных и афиных типов как сычи? Когда уже хозяева ваших анусов признают, что они допустили страшную ошибку, сделав работу с RealWord в хаскеле через монадическое IO говно?
#150 #435245
>>435235
Что ты несёшь? Вообще охуеть
#151 #435247
>>435245
Почему у вас IO сделано через монады, когда в нормальных чистых фя типа Clean оно сделано без них и работает быстрее и удобнее?
#152 #435252
>>435235
А эти твои линейные типы годны на что-нибудь кроме IO (с которым и монады справится могут)? А систему эффектов на них сделать можно?
А то таскают тут всякие говно из плюсов, а сами даже зависимые типы запилить не могут.
#153 #435406
Бампну. Во имя.
#154 #435483
>>435252
Конечно, помимо этого они дают нормальную поддержку изменяемых по месту структур данных без потери ленивости и referential transparency.
#155 #435486
>>435252
Вот в общем у димона неплохой доклад
http://thedeemon.livejournal.com/37515.html

Конечно афиные типы это такое, полумеры на мой взгляд, линейные как в Mercury более основательны, хоть и требуют определенного количества пунктов ментальной силы, чтобы их применять.
#156 #435869
Анончики, как то наткнулся на сайт/жж-шечку одного русского разработчика. Там было дохуя всяких книжек и статеек по функциональщине, теоркату и топологии и прочему на ftp-сервере и еще дохуя статей о буддизме и прочих размышлений. Книжки я скачал и иногда поглядываю, вот подумал и жж его посмотреть, но забыл как его звали. Может кто знает?
#157 #435880
>>419858
Спросил в лиспотреде, но он что-то не хочет бампаться, сраная макаба.

Лиспаны, начал тут учить Clojure, не могу никак вьехать.

Зашел на
https://www.4clojure.com/problem/2

Там вроде просто, вбиваю
(= (- 10 (* 2 3)) 4)

Мне пишет что юнит-тесты оно не проходит. Как дальше жить то?
#158 #435884
>>435880
Все бампается, уже ответил.
#160 #438315
>>438301
Какой-то он странный: вроде взрослый и местами негупый человек, а ведёт себя как школьник-двачер.
Он всегда таким был или это уже старческие болячки его подкосили?
#161 #439321
Привет)
Не тральте меня особо плиз)
Недавно решил, что создавать абстрактные фабрики фабрик - это не очень тру, и решил почитать что по функциональщине. Так знаком с ней на уровне указателей на функции, делегатов и лямбд в нормальных языках (т.е. не знаком вообще).
Думал обмазаться эрлангом каким или хачкилем.
Посоветуйте годную книжку? Или место, откуда начинать?
(Знаю, советовали уже раз 20 наверно, но мне лень искать, так что обоссыте, но всё равно посоветуйте, к?)
#162 #439338
>>439321
Начинай с хаскеля, в эрланге функциональщина такая себе.

В общем:
Книга - Real World Haskell
И соответствующий раздел на викибукс:
http://en.wikibooks.org/wiki/Haskell

Грема Хаттона, Душкина или Learn You a Haskell for Great Good - не читай, это говно для даунов и пустая трата времени.
14 Кб, 203x248
#163 #439344
>>439338
О, кого-то нового говном обозвали, надо почитать.
#164 #439357
>>439321
Лучше по этому гайду учи
http://bitemyapp.com/posts/2014-12-31-functional-education.html
Чувак там все четко расписал, что стоит читать, что не стоит.
sage #165 #439360
>>439357
всё хуйня кроме Real World Haskell и Typeclassopedia, нодискасc
#166 #439390
>>423322
Есть и отличный набор библиотек с исходниками, менеджером пакетов и документацией (в джавапомойке ничего подобного нет, приходится качать какие-то джарники непонятно откуда и жрать убогие жавадоки), и отличная IDE.
#167 #439393
>>423377
Любые. Если тупо юзать thow. Более того, возможны асинхронные исключения, если кто-то вызвал throwTo. Если хочется аналога checked exceptions, то можно использовать MonadError, control-monad-exception и тому подобное.
#168 #439394
>>423719

>модное, как скала


Да ты говноед, как я погляжу.
#169 #439398
>>424634
Бенчмарки разные бывают: http://www.yesodweb.com/blog/2011/03/preliminary-warp-cross-language-benchmarks (кстати, winstone - это джава, почему у winstone такой хуёвый перформанс?)
#170 #439399
>>426784

>Где их ставить обработчики


Так же, как и в остальных языках - в месте, где ты можешь адекватно исключение обработать (putStrLn "Ой, какая-то хуйня случилась.." - не есть адекватная обработка).
#171 #439416
Эй, искатель элемента в массиве, я тебе новый метод принёс

obj.getClass().isArray()

азазазаз
sage #172 #439435
>>439416
збс
#173 #439517
>>438301
Не, вроде не он. Там ссылка на ftp сервер была; и про буддизм что-то тут ничего не вижу.
#174 #439700
Haskell @ JIT/JVM?
#175 #439790
>>439338
Не слушай этого дауна. Learn You a Haskell for Great Good - годная книжка с цветными картинками. А вот Real World Haskell - устаревшее говно. Читай Изучаем Haskell от Алехандро Серано Мена. Но лично я без Learn You a Haskell for Great Good нихуя бы не понял
#176 #439818
>>439790
Только после прочтения Learn You a Haskell for Great Good нихуя не знаешь Haskell даже на интермедиант левеле, так как всё подаётся на уровне "эту хуйнюшку вот сюда, а вот эту вон туда и тогда получается вон то гыгыгы" и идёшь искать другую книжку, где хоть что-то нормально объясняют.

>лично я без Learn You a Haskell for Great Good нихуя бы не понял


Не нужно экстраполировать свою имбецильность на всех.
sage #178 #439834
В общем любые учебники которые объясняют Haskell оперируя не категориальными понятиями, а всякими "ну эт типа значение в коробочке))0" - параша.
sage #179 #439920
>>439834

> подразумевая, что категории нужны для такой примитивной вещи, как монады

#180 #440227
Сколько ключевых слов в этом язычке?
#181 #440229
#182 #440294
>>440229

Cлишком долго учить. :(
#183 #440298
>>439920

Лол. Категория как понятие в объёме необходимом для хаскеля это и есть хрень уровня "ну эт типа значение в коробочке))0". Просто люди по незнанию берут первую попавшуюся книгу по теоркату, а там книженция уровня оснований математики или топологии (что не каждый профессиональный математик из других направлений сходу разберет) и тут у них остатки мозгов заворачиваются. Хотя это чистый оверкилл.
#184 #440305
>>440298

> хрень уровня "ну эт типа значение в коробочке))0"


Чё, бля? Категория - это перегрузка стрелочки на уровне типов, и (.) с id на уровне значений.
#185 #440310
>>440298
Нихуя не оверкил, ты либо понимаешь монаду как моноид из категории эндофункторов и класс монад как реализацию этого в хаскеле, либо ты нихуя не понимаешь. И так почти со всем в хаскеле. Хотя, чтобы применять, понимание не нужно, достаточно макака-знаний на уровне "значений в коробочке".
#186 #440509
Как определить категорию без теории множеств???
#187 #440511
>>440509
Чего бы не спросить это в саентаче в математико-треди?
sage #188 #440597
>>419858
Кудасхелевыблядки - не люди. Period. Sage & hide.
#189 #440723
>>440310

>haskell


>чтобы применять, понимание не нужно


this
#190 #441950
Кто нить юзает Yi? Есть какой-то смысл?
#191 #441983
>>440310
Хуита. Куча ненужных слов и определений ради того, что можно выразить в три строчки используя множества.
И да, слова вроде «эндофунктор» сравни слову «флогистон»: даёт иллюзию понимания, фактически не объясняя ничего. А потом берутся всякие петушки с «быстрой сортировкой» в хаскеле в строчку.
#192 #441987
>>441983
Тебе, как я посмотрю, так понравилось озалупливание в квиксорт-треде, что ты нашел другой хаскелетред, раздвинул булки и дрожишь от предвкушения содомирования эндофунктором?
#193 #441989
>>441983
Тебя обоссали в твоём треде про квиксорт, так ты сюда пришёл за добавкой урины, неандерталец?

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


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

> да, слова вроде «эндофунктор» сравни слову «флогистон»


Ну для гуманитария может быть, а так это всего лишь функтор из категории в неё же.
#194 #441990
>>441987
>>441987

Лол, хайв
#195 #442009
>>441989

> функтор


Слово «отображение» недостаточно мудрёно. Вся суть хаскеперушков.
#196 #442029
>>442009
Ты объяснил мне все. Правда.
#197 #442038
>>442009
Ну да. А монада - ето массив. Всё этим хаскелепетушкам усложнить надо.
#198 #442084
>>442009
функтор - это специальный вид отображения (функции)
#199 #442085
>>442038
Монада - это специальный массив (неявный)
sage #200 #442088
>>442085
динамческий массив, ты забыл сказать
sage #201 #442091
всякий массив - монада, но не всякая монада - массив
sage #202 #442109
>>442091
если ты долго смотришь в монаду, то монада тоже смотрит в тебя
#203 #442119
делу время, а монаде час.
#204 #442121
>>442119
Семь раз забиндь, один раз вычисли
sage #205 #442221
монадствуешь умело - IO смело
#206 #443640
unsafePerformIO $ bump Upstream
просто потому что стасик в треде и хуле нам кабанам?
#207 #443645
А еще на хаскелле можно делать так http://govnokod.ru/15821
sage #208 #443686
>>443645
арканоид на хс короше поиска елемента в массиве на джеве ахах
axaxaxax
#209 #444223
Эмм... вам не кажется, что категории введены, чтобы оперировать классами. Т.к. понятия множеств оказалось недостаточно мощным, чтобы например оперировать понятиями множество всех множеств. А так по сути однохуйственно.
#210 #444268
>>444223
Нет, ты нихера не понял. Суть ТК это морфизмы, связи между элементами, а не сами элементы. Суперпозиция функций - это то из чего родилась ТК и это сама её суть.

I уровень абстракции: от понятий "два камня" и "два яблока" к числу 2, от понятия "камень повернулся боком" к понятию поворота на 90°.

II уровень абстракции: от конкретных чисел к кольцу целых чисел, от поворотов предметов к группам трёхмерных вращений.

III уровень абстракции: от групп вращений и иных преобразований к абстрактным группам со строго очерченными свойствами.

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

В теории множеств фейлит на IV уровне, потому что конструкция отображения является ни первичной, ни даже вспомогательной к самим множествам. В то время как в ТК морфизмы входят в аксиоматическое определение категории наравне с объектами. Более того, объекты - лишь частные случаи преобразований. Теория множеств изучает застывшие, "мёртвые" объекты, ТК - изучает их движения.
#211 #444537
>>444268
Abstract and Concrete Categories
The Joy of Cats
годная книга?
#212 #444538
>>444268
В догонку, какое-то новое знание ТК прибавила или просто красиво разложила все по полкам?
#213 #444841
>>419858
http://www.epam.com/careers/ukraine/kyiv/jo/8434.html
вот теперь я верю, что у хаскела есть будущее
533 Кб, 603x453
#214 #445846
Окей, Haskell на первый взгляд язык интересный.
Есть ли существенные минусы?
#215 #445863
>>445846
1. После Хаскеля ни на чем другом не охота писать кроме Агды
2. Ебаный пролог на уровне тайпклассов, ехал lift через lift, дохуя бойлерплейта на type-level, затыкаемого ональной магией вроде автоматического datatype promotion, препроцессора (TH) для генерации синглетонов, причем чтобы всё это говно не конфликтовало с твоими идентификаторами, к нему прихуячиваются префиксы (типа S - это синглетон, '[] - кайндконструктор, чтобы не конфликтовало с [] - тайпконструктором). Короче, полная хуйня на тайплевеле, надо всё это выкинуть и сделать уже нормальные зависимые типы.
#216 #445871
>>445863
А меня вот так накрыло: после хаскеля, скалы, пурскрипта и руста, не охота писать ни на чем кроме ультраминимальных динамически-типизированных скриптов (петон, кофе, мунскрипт, вот это всё).
#217 #445873
Эй, заклинатели монад, запилите goto >>445724
#219 #445887
>>445871

>петон


Это же ёбаная помойка даже по меркам динамикопитушения.
#220 #445896
>>445882
Это какая-то хуйня, а не goto.
Больше похоже на return в сишечках.
#221 #445917
>>445887
чаво? поясни-ка?
И да, уточни, 2ку имеешь в виду?
#222 #445920
>>445887
Руби и кложур - это ёбаное метаговно для любителей подрочить на код вместо того чтобы побыстрее решить задачу. В питоне не надо писать "end end end end end end" и "((((()))))))))))()()((((((((()()()(((((((((()()()))))))))))))))))))))))))))))))))))))))()()(", и это то что реально полезно на практике, а не блять возможность перегрузить method_missing или всякие ебучие макросы, которые позволят (и то - не всегда) сэкономить символов (по сравнению с реализацией того же самого на функциях и объектах на питоне) меньше, чем будет потеряно на скобки.
#223 #445923
>>445920
двачую этого

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

ЗЫ: Рубисты сраная хипстота
ЗЫ2: пошел писать скрипт для управления виртуальными машинами на API virsh. А рубисты сосут хуй, потому что к руби биндингов нет.
#224 #445924
>>445863
ой, да ну?
Писал на хаскеле, только вот не годится он для прикладных задач. Библиотек нет. Так что не охота на нем писать, потому что большое хуй че напишешь.
#225 #445927
>>445924

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


Можно примеры?
#226 #445929
>>445924

>Библиотек нет.


1. Каких, например?
2. Написание программы на Хаскеле вместе с недостающими библиотеками обычно занимает меньше времени, чем конфигурация xml-ных конфигов джаваговнеца.
#227 #445955
>>445927
>>445929
А вот не надо пиздеть. По скорости написания программ хаскель сливает всему кроме теорем пруверов по очевиднейшим причинам:
- овеществление эффектов
- отсутствие специального синтаксиса для элементарных вещей типа индексирования, мутирования, циклов, экспешнов
Даже когда есть все нужные библиотеки. Ты будешь тужиться над одним монадическим методом в 100 раз дольше, чем на любом нормальном языке, потому что тебе вместо
if yoba_1(f(x)) < yoba_2(g(y)): i_pognali(z)
надо сначала осознать а потом написать:
a <- f x
b <- g y
c <- (<) <$> yoba1 a <*> yoba2 b
when c $ do
iPognali z
Менеджмент первоклассных эффектов - это так же продуктивно как менеджмент первоклассного синтаксиса у лисперов. Можно написать кастомную хуйню, которая ничего не делает, а всё что что-то делает писать в 100 раз дольше и неудобнее.
Ну ладно, для случаев когда кастомная хуйня ещё не встроена в нормальные языки, хаскель может побеждать по удобству, так что пишите квантовые алгоритмы в монаде QIO.
#228 #445963
>>445955
Блядь, да похуй мне на скорость написания, ответь на >>445927
Помогай сообществу сука - и добрые люди занесут в вишлист/багтрекер/напишут велосипед.
#229 #445965
А особые ценители потратят дополнительное время на размышления, стоит ли им написать:
a <- f x
b <- g y
c <- (<) <$> yoba1 a <> yoba2 b
when c $ do ...
или может лучше:
a <- yoba1 =<< f x
b <- yoba2 =<< g y
when (a < b) $ do ...
или может лучше:
a <- f x
b <- g y
((<) <$> yoba1 a <
> yoba2 b) >>= flip when $ do ...
или может лучше написать утилитарный whenM и:
ltM ma mb = (<) <$> ma <*> mb
и заюзать как-то типа:
whenM ((yoba1 =<< f x) `ltM` (yoba2 =<< g y)) $ do ...
или как там блять ещё.
Отличный способ провести время, в общем.
#230 #445966
>>445955
Скорость написания от опыта больше зависит, мне кажется.
Во всяких питонах ты уже привык отслеживать, например, состояние переменной в голове, поэтому можешь писать не задумываясь. А к особенностям хаскеля ещё не привык.
#231 #445968
>>445966
Тебе кажется. С хаскелем у меня в 100 раз больше опыта чем с питоном, но на питоне я в 100500 раз продуктивнее, даже его не зная. От опыта это, конечно, зависит, но на хаскеле в принципе нельзя продуктивно, да и вообще это бессмысленно, писать что-то кроме экзотических вещей вроде алгоритмов с автоматическим дифференцированием или квантовых вычислений. И то - это осмысленно лишь до тех пор пока для этого не создадут специальные языки, где такие стратегии вычислений будут встроены. В общем, всё то же самое что и с лиспами.
#232 #445971
>>445968
Я где-то видел статью, в ней рассказывали о своих приключениях при переписывании какой-то йобы с питона на хаскель.
В общем вышло, что кодить на хаскеле выходит раза в два медленнее, но весь цикл разработки занял примерно столько же времени.
#233 #445977
>>445971
Однажды читал книгу про приключения твоей мамки в дагестане. Так вот, в ней было написано, что твоя статья - обычный пеар параши.
#234 #445990
>>445977
Ну ти траль.
#235 #445994
>>445965

> Отличный способ провести время, в общем.


так да.
#236 #446015
>>445955
В "нормальном языке" ты всё равно будешь тратить в джва раза больше времени на фабрики абстрактных бобов-синглетонов, а потом еще тратить время на отладку из-за какого-нибудь побочного эффекта.
#237 #446016
>>445963
Он на это не ответит, потому что он - очевидный пиздабол.
#238 #446017
>>446015
Нихуя, бобы пишутся быстро
Создал новый класс, вбил свойства, сгенерил конструтор и геттеры
ИДЕ после этого выдает подсказки/автодополняет по свойствам
#239 #446020
>>446017
Во до чего техника дошла.
#240 #446021
>>446020
Хаскеляторам не привыкать к отстутсвию инструментов разработки.
#241 #446023
>>446021
И не говори. Мне вот интересно, а ява-сеньорам не приходило в голову, что мусорные конструкции, которые запросто генерирует IDE, можно было давно выкинуть.
#242 #446028
>>446023
ОБРАТНАЯ СОВМЕСТИМОСТЬ, к ее отсутствию хаскеляторы тоже привыкли, наверное.
#243 #446036
>>446028
Можно было бы и с сохранением обатной совместимости.
#244 #446039
>>446028
Сколько примеров нарушения обратной совместимости ты можешь привести в Хаскеле, толстячёк?
#245 #446042
>>445971
Ты вот эту имеешь в виду: http://habrahabr.ru/post/193722/?
#246 #446052
>>446039

> толстячёк


Я еще не начинал тралить)))
#247 #446053
>>446036
Да, можно было бы. Ах, мечты!
#248 #446054
>>446052
Ещё не начал, а уже весь тред жиром залил.
#249 #446055
>>446053
Ну ничего, потихоньку уже начали сахарок запиливать, к выпуску Java 64 уже можно будет не прибегать к услугам кодогенерации IDE
#250 #446074
>>446055
Возможно, к тому времени в хаскелле появится ИДЕ.
Правда более вероятно то, что к 64му выпуску джавы место хаскелля займет другой академический язычок.
#251 #446075
>>446074
У хаскеля одна из лучших IDE, джаваговнам до него далеко.
#252 #446080
>>446075
а ти траль))
#253 #446094
>>446080
С чего ты взял?
#254 #446122
>>446075

>У хаскеля одна из лучших IDE


Ты про онлайновую поделку?
#255 #446130
>>446122
По неё. Когда идея станет работать так же стабильно, как эта "поделка" можно будет говорить о наличие в джаве IDE.
#256 #446178
>>419858
Зачем хаскель если есть толпа тестеров без образования?
#257 #446187
>>446178
Зачем вообще что-то автоматизировать, если есть толпа не имеющих образования, но желающих работать?
#258 #446193
>>446187

> что-то автоматизировать


Ты не сможешь автоматизировать что то, если меняются требования.
#259 #446196
>>446193
Щито? Ты к чему это?
#260 #446215
>>446178
Затем, что менеджить кодобазу в несколько миллионов строк тебе толпа тестеров никак не поможет.
#261 #448865
Ребят, что вы пишете на хаскеле?
#262 #448870
>>448865
Считаем факториал, пока ява-макаки ищут элемент в массиве.
16 Кб, 445x459
#263 #448955
>>448870
чет пукнул с этого
#264 #449441
>>445924
Разве нет генератора биндингов? Какие библиотеки надо?

Import Zdelat_vsyo
main = do Zdelat_vsyo.main
#265 #449640
>>449441
А это правильный вопрос.
#266 #449743
[code]
:t map . foldr
map . foldr :: (a1 -> a -> a) -> [a] -> [[a1] -> a]
[/code]
Может кто-нибудь объяснить сигнатуру? Что такое а1? и что возращает функция, функцию из [a1] в a?
sage #267 #449748
>>449743
map (foldr f) [a,b,c] = [foldr f a,foldr f b,foldr f c]
#268 #449822
>>448865
Я эмулятор биржи пишу, например. По ощущениям примерно та же хуйня, как если бы на Джаве писал, или на Сишарпе (в плане трудозатрат), но как-то более правильно получается что ли. Т.е. на Джаве или Сишарпе мне пришлось бы заранее выбирать тип для денег (типа деньги правильнее в decimal-ах считать, вроде как считать деньги в double или float - это зашквар), но когда я пишу order book, мне как-то совершенно не хочется думать о том, как именно надо считать деньги, мне лишь важно, что ордера матчатся, если bid >= ask и не матчатся в противном случае, а как они там представлены - это уже дело бухгалтерии. И вот в Джаве или Сишарпе мне пришлось бы либо привязываться к конкретному типу, либо вводить кучу классов/дженериков для величин, которые не важны в конкретном алгоритме, а в Хаскеле я обхожусь семействами типов и единственным параметром. Мне так удобнее, короче. В общем Хаскель позволяет точечно абстрагироваться от того, что тебе не нужно в конкретном алгоритме. Это наверняка не важно, если ты заранее всё знаешь о задаче и можешь заранее сказать, что деньги у тебя - децималы, идентификаторы заказов - лонги, идентификаторы инструментов - строки, и что в будущем тебе не придётся менять тип какой-нибудь хуйни. Ну т.е. в Джаве надо думать о том, что может быть вдруг придётся, и если придётся, то надо использовать интерфейс, а если не придётся - то это овердизайн. А в Хаскеле просто абстрагировался, т.е. просто указал, что я хочу эту хуйню сравнивать, а что там именно - моему алгоритму не важно, и в путь.
#269 #449901
>>429323
Поясни, чем этот ваш хачкель лучше лиспа?
#270 #449918
>>423245
Java для быдла, господа выбирают c#
#271 #449939
>>429270
Ну есть же >>436191.
20 Кб, 256x150
#272 #449976
>>429323
А ты уже.
#273 #449977
>>449901
Статической типизацией.
#274 #453035
>>449901
На хачкелле пишут имиджборды, а на лиспе нет.
sage #275 #453070
>>453035
На лиспе пишут клон варика и ос, а на хаскеле нет.
#276 #453076
>>453070

>пишут


Пишет.
#277 #453082
>>453076
ос написал не золотце)
sage #279 #453111
>>453083
нахуй ты этот баян сюда принес?
#280 #453174
>>449901
Тем же, чем и брейнфака.
#281 #453198
А на вашем языке можно с реестром Виновс работать? Или вы слишком элитны для этого?
#283 #453800
>>453198
Можно, но не нужно.
#284 #454228
Как получить случайное девятизначное число?
#285 #454253
>>454228
import System.Random

fst . randomR (10^8, 10^9-1) <$> newStdGen
#286 #454278
>>454253
Или просто randomRIO (10^8, 10^9-1)
#287 #454543
>>445923
Хуёв тебе за щеку.
https://www.libvirt.org/ruby/api/
#288 #455696
В чем смысл такого ебанутого типа:
(>>=) :: Monad m => m a -> (a -> m b) -> m b
а именно части (a -> m b)?
Ведь если результат все равно обязан быть m b, то удобнее подставить более простую функцию (a -> b). Чому мне не дают сэкономить пару лишних нажатий?
#289 #455714
>>455696
смотри fmap
sage #290 #455814
>>455696
в этой части вся мякотка, няша
#291 #455816
>>455696
Можешь подставить a -> b через liftM
#292 #455850
>>455696
А вообще у тебя есть return чтоб легко сделать из своего b mb.
#293 #455852
>>455850
Только сок в том, что return отработает именно так, как определено в контексте той конкретной монады, внутри которой ты его используешь.
#294 #455886
>>455696
Если бы там было (a -> b), то не было бы никакого толку с монад.
#295 #455896
>>455886
суть монад лучше всего показывается с помощью join, а не bind
#296 #455899
Хаскельбомжи, поясните, чому вы не любите скобколюбов?

Мимоскобколюб
#297 #455900
>>453198
Для любви в реестре есть f#
#298 #455902
>>448865
Сферических коней в вакууме.
GHC7.10.1 #299 #455903
- Applicative is now a superclass of Monad and in the Prelude.
свяршылась
sage #300 #455906
>>455899
динамическая дрисня
#301 #455932
>>455906
И что? Это ж не питон какой, чтоб ошибки, которые способна выявить статическая типизация, доставляли неудобств.
sage #302 #455951
кто в yesod могёт? писали чо?
#303 #456016
>>455696
В том, что ты возвращаешь значение b с эффектом m. Если у тебя просто функция a -> b, без эффекта, то монада не нужна.
#304 #456017
>>455899
С чего ты взял, что мы их не любим? У меня дома живёт один, регулярно его няшу.
#305 #456334
>>455906
Динамика, энергичный порядок редукции
#306 #456335
#307 #456462
>>455906
Чем это плохо?
#308 #456470
>>456334
Заверни в THUNK.
#309 #457214
Кто нибудь использует cloud haskell? Есть смысл использовать вместо Erlang? Меня привлекает обилие библиотек для Haskell и его развитие, да и сам язык как инструмент для моих задач представляется удобным. Но использовать в продакшене пока не решаюсь. Есть у Cloud Haskell какие то подводные камни, которые делают Erlang лучшим решением?
#310 #457271
Кто нибудь использует CLOUD HASKELL? Есть SMYSL использовать вместо ERLANG? Меня привлекает обилие BIBLIOTEK для HASKELL и его RAZVITIE, да и сам язык как инструмент для моих задач представляется удобным. Но ISPOLZOVAT в PRODUCTION пока NE RESHAYUS. EST у CLOUD HASKELL какие то PODVODNYE камни, которые делают ERLANG LUCHSHIM RESHENIEM?
#311 #457346
>>457214

>Есть смысл использовать вместо Erlang?


Ну это смотря что тебе надо, собственно.
#312 #457447
#313 #457448
#314 #457491
>>457214
нет, ибо нежизнеспособное говно
#315 #457978
>>457214

>Кто нибудь использует cloud haskell?


Нет.

>Есть смысл использовать вместо Erlang?


Если ты про возможность построение системы, где можно послать хуй знает что процессу, который находится хуй знает где и он хуй знает как его обработает (а может быть и не обработает вообще), а потом обмазывать её другими процессами которые перезапускают первые процессы пока они перезапускают другие процессы по те их перезапускают, то не имеет.
#316 #458049
>>457978
этот парашютист порвался
#317 #458332
В течение полугода понаустанавливал всякого дерьма из этого вашего hackage, теперь не работает куча пакетов.
Как поправить или легче снести все к хуям?
#318 #458354
>>458332
Сноси к хуям, всё равно переустановка ничего не стоит.
#319 #458425
>>458332
Используй cabal-dev или cabal sandbox и будет тебе счастье. Или вообще через портежи поддерживай все это дело
#320 #458437
>>449743
a1 это любой тип
a это любой тип

Эта хуевина принимает функцию, принимающую объект типа a1 и объект типа a и возвращающую объект типа a, и список объектов типа a, и возвращает список функций, принимающих список объектов типа a1 и возвращающих объект типа a.
#321 #458457
>>458354

> всё равно переустановка ничего не стоит


Кроме времени, естественно. То есть, как я понимаю, нет способа поддерживать работоспособность кучи пакетов?
>>458425

>cabal sandbox


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

Короче, сбрил нахуй ~/.{ghc,cabal}
#322 #458468
>>458457
Он умеет доустанавливать недостающие пакеты в песочницу.
#323 #458471
>>458457

>Кроме времени, естественно.


Запускаеш, идёш пит чай. Используеш -jN для параллельной установки.

>нет способа поддерживать работоспособность кучи пакетов?


В общем случае нет, потому что diamond dependency problem. Учитывая, что пакеты могут явно указывать диапазон версий пакетов от которых они зависят, задача может не иметь решений, например, если ты билдишь А, который зависит от В и С, которые используют разные версии D, и множества допустимых версий не пересекаются. При этом В и С по отдельности могут билдится нормально. Для этого пилится платформа где всё гарантированно билдится.

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


Почему большое? Только зависимости.
#324 #458474
>>458468
>>458471
Понял пора бы наконец начать читать маны

Кстати, приятной неожиданностью было обнаружить в репах дебиана слегка несвежую, но рабочую часть того, что я хотел установить.
#325 #458519
>>458471
LTS еще есть... платформа не нужна
#326 #458545
>>458519

>LTS


>Haskell


Да ладно, кто там будет его суппортить. Наверняка взяли ту же платформу и засунули её в репозиторий. Если будут проблемы, пошлют к хаскеллистам.
#327 #458548
#328 #458769
На чем сейчас gui принято писать?
sage #329 #458778
я писал диплом с gtk2hs
#330 #458800
>>458778
Что писал?
sage #331 #458820
>>458800
игры про раскраску графов, человек против компьютера, AI и гуй
709 Кб, 1920x1080
#332 #460280
Не программировал лет пять после университета, хотя в былые времена обмазывался ЛИСПами, Агдой и Коком, но потом всё забыл, работал в далекой от IT области. Хочу сейчас в качестве хобби понемногу изучать Хаскель, вот это всё. Посоветуйте годных книжек и прочих ресурсов. Можно и другой наркоманский recreational programming.
#333 #460322
>>460280
следуй вот этому гайду:
http://bitemyapp.com/posts/2014-12-31-functional-education.html

Еще хорошие современные книги (первая правда изобилует опечатками)
1) http://www.piter.com/product/izuchaem-haskell-biblioteka-programmista
2) http://haskelldata.com/
3) http://dev.stephendiehl.com/hask/
#334 #460419
>>460322

Охуенно!

Спасибо большое, когда я несколько лет назад интересовался, этого еще не было.
#335 #460464
>>460280

>в былые времена обмазывался ЛИСПами, Агдой и Коком, но потом всё забыл, работал в далекой от IT области


Кем работал, расскажи о себе, няша?
#336 #460468
>>460419
еще забыл peддиT
/r/haskell/
русскоязычный ресурс
ruhaskell.org
русскоязычный чятик по хаскеллю
гиттер.им/ruHaskell/forall
онлайн-ide
fpcomplete.com/auth/login
ну и сам сайт fpcomplete.com весьма годный.
#337 #460510
>>460322

> следуй вот этому гайду


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

> izuchaem-haskell-biblioteka-programmista


но ты наверное все равно не поймешь разницы
#338 #460513
>>460280
Очевидный real world haskell
#340 #460770
>>460513
Говорят RWH уже устарел
#341 #460782
>>460770
Есть такое.
#342 #460798
>>460513
RWH - это как уроки литературы в школе. Как бы ни были охуенены Толстой и Достоевский, после школьного вытраха мозга тупытыми сочинениями ты будешь русскую классическую литературу еще лет 5 ненавидеть, пока не попустит. Потому что вместо того чтобы учить наслаждаться красотой слога и стиля, тебя заставляют писать какую-то хуйню на тему что имел ввиду автор, Андрей и Дуб, блядь, тварь я дрожащая, или залупа коня Будулая. Делают они это на голуом глазу, будто так и надо, совершенно упуская из вида, что художественная литература - это интертеймент, это Голливуд 19-го века. Вот какой мудак станет на полном серьёзе искать острый социальный подтекст в фильме "Трансформеры"? Не, он там наверняка есть, но фильм-то смотрят чтобы покайфовать, заценить спецэффекты, получить, прежде всего, эстетическое удовольствие. Если для полного эстетического удовольствия нужно, чтобы автор затронул какие-то философские либо политические струнки, то в хорошем кино это тоже безусловно есть, иначе фильм покажется тупым, неинтересным. Но, прежде всего, фильм - это интертеймент. Вот и с RWH - та же хуйня. В RWH выхолощенный Хаскель. А кому он нахуй такой нужен? Хаскель изучают ради кайфа, ради зигохистоморфных препроморфизмов. Ведь для кастратов есть Джава, которая ни чуть не хуже в этом плане.
>>460770
Нет, он не устарел. В Хаскеле вообще всё заебок с обратной совместимостью, поэтому и знания десятилетеней давности не назовёшь малоактуальными. Проблема не в устаревании, а в подаче материала. RWH уныл. Прочитав RWH сложится лишь одно впечатление: "а нахуя мне Хаскель, я бы мог сделать это и на Джаве.." Т.е. чисто в техническом плане с RWH всё заебок, но он не даёт никакой эстетики абсолютно. За эстетикой нужно гнать в functional pearls, typeclassopedia для начала, чтобы понять, как математические абстракции могут реифицироваться в языке программирования, и словить от этого кайф. Вот тогда язык будет изучать интересно и приятно. А нахуй его учить по техническому мануалу RWH - вообще не понятно. Это имело бы смысл, если бы ты был ссаным школьником, который через силу учит востребованный рынком ЯП чтобы устроиться на работу. Но Хаскель рынком нихуя не востребован, его учат не ради того, чтобы батрачить, а ради того, чтобы поймать кайф, которого в RWH нет. Поэтому RWH не нужен, я считаю. Ну или нужен чисто как технический справочник, если ты уже решил что хочешь Хаскель потому что тебе вставляет beautiful concurrency, например, и тебе лишь нужно уточнить технические моменты, но ни в коем случае не его не следует читать как введение в язык программирования.
#342 #460798
>>460513
RWH - это как уроки литературы в школе. Как бы ни были охуенены Толстой и Достоевский, после школьного вытраха мозга тупытыми сочинениями ты будешь русскую классическую литературу еще лет 5 ненавидеть, пока не попустит. Потому что вместо того чтобы учить наслаждаться красотой слога и стиля, тебя заставляют писать какую-то хуйню на тему что имел ввиду автор, Андрей и Дуб, блядь, тварь я дрожащая, или залупа коня Будулая. Делают они это на голуом глазу, будто так и надо, совершенно упуская из вида, что художественная литература - это интертеймент, это Голливуд 19-го века. Вот какой мудак станет на полном серьёзе искать острый социальный подтекст в фильме "Трансформеры"? Не, он там наверняка есть, но фильм-то смотрят чтобы покайфовать, заценить спецэффекты, получить, прежде всего, эстетическое удовольствие. Если для полного эстетического удовольствия нужно, чтобы автор затронул какие-то философские либо политические струнки, то в хорошем кино это тоже безусловно есть, иначе фильм покажется тупым, неинтересным. Но, прежде всего, фильм - это интертеймент. Вот и с RWH - та же хуйня. В RWH выхолощенный Хаскель. А кому он нахуй такой нужен? Хаскель изучают ради кайфа, ради зигохистоморфных препроморфизмов. Ведь для кастратов есть Джава, которая ни чуть не хуже в этом плане.
>>460770
Нет, он не устарел. В Хаскеле вообще всё заебок с обратной совместимостью, поэтому и знания десятилетеней давности не назовёшь малоактуальными. Проблема не в устаревании, а в подаче материала. RWH уныл. Прочитав RWH сложится лишь одно впечатление: "а нахуя мне Хаскель, я бы мог сделать это и на Джаве.." Т.е. чисто в техническом плане с RWH всё заебок, но он не даёт никакой эстетики абсолютно. За эстетикой нужно гнать в functional pearls, typeclassopedia для начала, чтобы понять, как математические абстракции могут реифицироваться в языке программирования, и словить от этого кайф. Вот тогда язык будет изучать интересно и приятно. А нахуй его учить по техническому мануалу RWH - вообще не понятно. Это имело бы смысл, если бы ты был ссаным школьником, который через силу учит востребованный рынком ЯП чтобы устроиться на работу. Но Хаскель рынком нихуя не востребован, его учат не ради того, чтобы батрачить, а ради того, чтобы поймать кайф, которого в RWH нет. Поэтому RWH не нужен, я считаю. Ну или нужен чисто как технический справочник, если ты уже решил что хочешь Хаскель потому что тебе вставляет beautiful concurrency, например, и тебе лишь нужно уточнить технические моменты, но ни в коем случае не его не следует читать как введение в язык программирования.
#343 #460803
>>423295
Ах ты засратый подхалим! Всем изветсно, что это переделанная паста из музыкача. Я, Стасик, снизойду до тебя, чтобы провести аппликивным функтором по твоей монаде, а также отметить, что переделку паст я не котирую. Я люблю оригинальный контент, вроде этого http://pastebin.com/WP1zGZKX восхваляющий мою скромность и величие, а с музыкачем, это в /mu/
#344 #460842
>>444537
Awodey, Category Theory нормальная.
>>444538
Универсальные свойства.жпг
Через них очень много вещей выводится элементарно, особенно смотри в алгебраической топологии, для нужд которой теоркат и был изначально создан.
#345 #460887
Real World Staseek
#346 #460976
>>460842

>Awodey, Category Theory


Пидорство ебаное.
Постоянно пиздит про универсальное свойство, но ни разу не объясняет что это такое.
Рисует стрелочки с разными хуйнюшками-завитушками - опять же нигде не объясняется что они означают. Странички с обозначениями конечно же нет - зачем, ведь все и так уже в теме.
#347 #460979
>>460976

>Постоянно пиздит про универсальное свойство, но ни разу не объясняет что это такое



Да потому что нет такого понятия "универсальное свойство". Этими словами называют любую диаграмму, которая определяет что-то (с точностью до изоморфизма). Есть более конкретные понятия, например сопряженные функторы. Часто русуют диаграмму, которая эквивалентна сопряжению, а потом называют это универсальным свойством.

> стрелочки с разными хуйнюшками-завитушками


'>->' для мономорфизмов, '->>' для эпиморфизмов, и всё пожалуй.
42 Кб, 576x463
#349 #461308
>>461282
http://nlab.mathforge.org/nlab/show/universal+construction
Еще раз, есть представимые функторы, пределы, копределы, сопряженные функторы, и т. д. Понятие "универсальное свойство" не нужно. Его использует Бурбаки, но просто потому, что чисто исторически не упоминает слов "категории" и "функторы", даже когда это целесообразно.
sage #350 #461313
>>461308
Ты хоть читал, что там написано-то?

> every single one of these is a special case of every other, so somehow one single concept here comes to us with many different faces.


И после этого ты будешь говорить

> Понятие "универсальное свойство" не нужно


рипс-лаовай?
#351 #461324
>>461313
Это неформальное понятие. Заметь, в nLab нет никакого определения "универсального свойства". Потому что придумывать такое определение нахуй не нужно. Но можно неформально называть что-то универсальным.
#352 #461431
>>461324

> в nLab нет никакого определения "универсального свойства"


В nLab вообще мало строгих определений. В основном неформальные конспекты.
#353 #461808
>>448865

Бизнес-интеграцию. Скоро буду себе замену искать, кстати. В ДС студентота с зайчатками хаскеля подошла бы.
#354 #462395
Посоны, пришел к врачу, врач сказал, что монады. Что он имел в виду?
#355 #462412
>>462395
Зависит от того, что ты у него спросил.
#356 #462545
>>462395
Хламидо или трихо?
#357 #462633
Haskell очень страшный, дети, не изучайте его!
Многие, кто слышал про Haskell,
зацепили краем уха страшное слово,
всенепременно, у всех программистов,
ассоциируемое с Haskell'ем -- монады.

Но это всё фигня.
Посмотрите на комонады, сопряжённые функторы,
расширения Кана и braided моноидальные категории.

http://hackage.haskell.org/package/category-extras

Скажу по секрету, что это совсем даже и не ужас,
бывает и ещё гораздо страшнее, очень-очень страшное!
Дети, бойтесь Haskell'я, обходите его стороной!
#359 #462826
Поясните за комонады. Я что-то не очень представляю, для каких случаев они применимы.
#360 #462828
>>462826
Свертка (которая интеграл) - это комонада
Зипперы - это свёртки и комонады
#361 #462833
>>462828
Ну и хуй с того.
#362 #462834
>>462833
Обработка изображений делается на комонадах
Они вообще нужнее монад
#363 #462846
>>462828
>>462834
Общие слова я уже слышал. А на пальцах показать можешь?
#364 #462854
>>462846
Я тебе клоун, душкин какой что-ли, развлекать тебя? Сам разберешься, если гуглить умеешь.
лови жопных сёрферов.
https://www.youtube.com/watch?v=1aQldvK3Y1A
#365 #462891
>>462834

> Обработка изображений делается


Возможно вы имели в виду:
Автоматизация синтаксического шума на пробрасывание контекста и связывание вычислений для вещей, которых тебе понадобится пару десятков строчек. А в реализации низкоуровневых базисных вещей, которые ты будешь вызывать и комбинировать в этих строчках, всё будет переобмазано ST и уёбащным циклами и Ref'ами, которые можно было написать в 100 раз короче на любом скрипте, а потом эти пару функций написанных в монаде обработки изображений будешь тягать из IO, которого будет сотни строк, над каждой из которых ты будешь задумываться какой сорт бинда в ней сделать, и которое будет в 1000 раз бойлерплейтнее чем на любом скрипте.
#366 #462893
>>462891
Андрюша, не буянь
#367 #462908
>>462891
Ты просто не умеешь готовить Haskell
#368 #463112
>>462891
Очень похоже на описание кода программы в конце книги Холомьева, которую тут время от времени советуют.
#369 #465231
есть функция
[code]
readlines filename = do
content <- readFile filename
let filelines = lines content
return filelines
[/code]
как теперь это попринтить с помощью putStrLn?
#370 #465237
>>465231
mapM_ putStrLn =<< readlines "file"
#371 #465244
в этой дыре, на этом блдском маскараде
волки в овечьих кудрях, змеи в белых перьях
я всем отдал по лоскуту своего наряда
я стою голый, я не верю... своему веселью
нельзя плакать, нельзя смеяться, нельзя
в глазах равнодушие... за глазами агрессия
кому продать свою девственность и в придачу себя?
приобретаешь свободу, а на сдачу - сумасшествие
я выхожу из себя
и не нахожу дорогу обратно
я не в себе давно уже
а в ком - мне до сих пор не понятно
сменяю одно заблужденье другим
я понял, это и есть чертово взросление
я вылез из кокона, первые сделал шаги
но где мои крылья? я гусеница, как и прежде
сколько есть у меня времени все взвесить?
сколько еще подтанцовывать внутренним бесам?
для мудрого – всё страдание, а любой поступок - зло
падающему улыбнитесь. Станислав Никто

алехин

бытие и абсурд, общество потребленья, паранойя
взросление, порнография, желанье стать новым ноем
раздавая конфеты бабам, постегаю прикладное христианство
все по кругу, где черта между покоем и бл
дством?
моя мысль летела вниз по лестнице и далее
мир насквозь, к манящим звездам женских гениталий
бутылка выпила меня целиком, я полетел за окурком
пока не споткнулся о пистолет этого придурка
я вас всех видел в гробу в белых тапочках!
можете жрать свое говно, я слишком талантливый!
вы все сор, вы пыль! а я король-самоубийца
я зажмурил один глаз, чтобы гондон этот не двоился
что ты орешь, "кто вы"? я с тобой тут один
засунь себе в жопу этот пистолет, кретин
вопи, что хочешь, но ты не разбудишь вселенную
умри или живи со своим членом среднего размера
но у меня уже не будет детей и сверхурочных
не взорвется в метро сосед, который много дрочит
мой крик застыл в глотке в поисках рта
не сосите вхолостую. Евгений Пустота.
#371 #465244
в этой дыре, на этом блдском маскараде
волки в овечьих кудрях, змеи в белых перьях
я всем отдал по лоскуту своего наряда
я стою голый, я не верю... своему веселью
нельзя плакать, нельзя смеяться, нельзя
в глазах равнодушие... за глазами агрессия
кому продать свою девственность и в придачу себя?
приобретаешь свободу, а на сдачу - сумасшествие
я выхожу из себя
и не нахожу дорогу обратно
я не в себе давно уже
а в ком - мне до сих пор не понятно
сменяю одно заблужденье другим
я понял, это и есть чертово взросление
я вылез из кокона, первые сделал шаги
но где мои крылья? я гусеница, как и прежде
сколько есть у меня времени все взвесить?
сколько еще подтанцовывать внутренним бесам?
для мудрого – всё страдание, а любой поступок - зло
падающему улыбнитесь. Станислав Никто

алехин

бытие и абсурд, общество потребленья, паранойя
взросление, порнография, желанье стать новым ноем
раздавая конфеты бабам, постегаю прикладное христианство
все по кругу, где черта между покоем и бл
дством?
моя мысль летела вниз по лестнице и далее
мир насквозь, к манящим звездам женских гениталий
бутылка выпила меня целиком, я полетел за окурком
пока не споткнулся о пистолет этого придурка
я вас всех видел в гробу в белых тапочках!
можете жрать свое говно, я слишком талантливый!
вы все сор, вы пыль! а я король-самоубийца
я зажмурил один глаз, чтобы гондон этот не двоился
что ты орешь, "кто вы"? я с тобой тут один
засунь себе в жопу этот пистолет, кретин
вопи, что хочешь, но ты не разбудишь вселенную
умри или живи со своим членом среднего размера
но у меня уже не будет детей и сверхурочных
не взорвется в метро сосед, который много дрочит
мой крик застыл в глотке в поисках рта
не сосите вхолостую. Евгений Пустота.
#372 #465479
Почему экранируются нелатинские символы в ghci? putStrLn "привет" дает нормальный результат, а просто "привет" дает "\1087\1088\1080\1074\1077\1090"
#373 #465484
>>465479
show для String не умеет в уникод.
#374 #465949
Сап, хаскелач. Есть один поток данных. Этот поток бесконечный и мне нужно последовательно складировать его в файлы определенного размера. Как это можно сделать? Пробовал на кондуитах, но не могу описать момент, при котором запись перейдет в другой файл.
#375 #465985
>>465949
splitAt?
sage #376 #466057
razxujachitPoFajlam $ map (take razmer) $ iterate (drop razmer) dannie
#377 #466449
>>466057
что курил?
#378 #466646
>>465237
а как теперь у putStrLn указать произвольную кодировку? У меня он по дефолту в cp866 печатает
#381 #467305
>>423659

>Для того, чтобы экспериментировать с архитектурными решениями


Т.е прогу свою с гуем я точно не запилю и начинать с хаскеля как первого языка точно не следует ни в коем случае? только не ржите, я реально не понимаю, единственное что меня интересовало - написание своих VST, но они все на C++ пилятся.
#383 #468644
>>467305

> Т.е прогу свою с гуем я точно не запилю


Ну почему нет, посмотри, например, как в elm'е это сделано.
#384 #468649
>>468644

>Ну почему нет, посмотри, например, как в elm'е это сделано.


Он же про хаскель говорит
#385 #468689
>>468649
Будто бы в хаскеле нельзя точно так же сделать.
#386 #468901
Братишки, помогите в постижении кметтоебства. Я тут посмотрел его видео про hask и вообще нихуя не понял. Что за хуйню он вообще накодил и для чего это может понадобиться?
Есть ли способ узнать на хакедже какие пакеты используют этот пакет? Или может быть кто-то знает проекты где это используется?
#387 #468902
>>468901

>Есть ли способ узнать на хакедже какие пакеты используют этот пакет?


http://packdeps.haskellers.com/reverse
но он чойта лежит сейчас
#388 #469511
>>468902
В общем ожидаемо, никто этот пакет не использует.
#389 #469640
В ваших тредах не сижу, на работе работаю на C#. Хочу дома и в отпуске вкатится в функциональщину, смотрю еще опен сорц проекты интересные на хаскеле.

В общем ближе к сути. С чего с начать? Там книжку посоветуйте или читать документацию и вникать самому лучше?
#390 #469700
>>419858
В LISP, Forth, Nemerle с помощью макросов можно создать свой язык программирования с каким угодно синтаксисом. В Haskell такое возможно? Как там вообще обстоит дело с метапрограммированием?
#391 #469741
>>469640
Читай А.Мена "Изучаем Haskell", не читай Real World Haskell, Learn You A Haskell, Холомьева
>>469700
Ну это как раз язык для создания DSL
#392 #469743
>>469511
Учитывая, что у неё 115 скачиваний за всё время, результат более чем ожидаемый. Кошерное кметоёбство - это линзы. Вот эта штука https://hackage.haskell.org/package/algebra тоже более-менее юзабельна как замена стандартным моноидам или numeric-prelude.
#393 #469758
>>469640

>С чего с начать?


С того, чтобы написать программу. По учебникам ЯП нет смысла учить, это же тебе на матешка в ВУЗ-е для экзамена, а чисто прикладная вещь. Все учебники примерно одинаковые в том плане, что покрывают какой-то объем материала +-, при этом ни в одном из них не будет всего, и ни один не гарантирует, что там будет именно то, что тебе надо. Поэтому просто бери и пиши, попутно гугля как сделать в Хаскеле какую-то нужную тебе вещь. Если чувствуешь, что много незнакомых слов, можешь читнуть отдельные главы, чтобы разобраться, но не наоборот.
>>469700
Можно (есть TH) но не нужно. Язык не про макросодрочесрство, а скорее напротив, про предоставление достаточно сильных абстракций, чтобы через них эффективно выражалось большинство задач без переизобретения языка.
34 Кб, 429x410
#394 #469808
Вечер в хату
Нужна программа для перехвата предварительных заказов, такси везет СПб
Такое возможно?
sage #395 #469814
>>469808
вроде в спринге были какието перехватчики, советую посмотреть
#396 #469829
>>469808
Сделаю за тарелку борща
#397 #470252
>>469640

>смотрю еще опен сорц проекты интересные на хаскеле


Какие это?
#398 #470476
#399 #470717
>>469829
Хоть за 2, лишь бы работало!
#400 #470727
>>470717
Борщ должен быть действительно хорош. Ты уверен что справишься?
#401 #471002
Эй, борщевики, сколько нужно усилий (точнее человеко-часов) чтобы написать на хачкиле (который же охуенно абстрактный язык и все такое) бекенд basecamp'а, хотя бы основные фичи (управление проектами, пользователями, их доступом и профилями, таски различного вида, обсуждения, аттачи, действия с условиями (например, перебросить задачу на кента, оставить себя в наблюдателях) - вот это все) и без хитрого масштабирования?
#402 #471009
>>471002
нахуй, бери рельсы, они под это заточены
#403 #471021
>>471009
Так почему не хаскиль?
#404 #471024
>>471021
Протопируешь на рельсах - переписываешь на хаскель, что не нравится.
#405 #471096
>>471021
заебешься
#406 #471097
>>471021
заебешься
#407 #471119
>>471009
Чем рельсы лучше Yesod?
#408 #471161
>>471119
Всем, блядь.
#409 #471187
>>471161
Т.е. ты не знаешь, но мнение имеешь?
#410 #471188
>>471097
С хуя ли хаскель такой сложный? Он же наоборот в разы проще любой ооп-параши. Алсо, идите на хуй со своим теоркатом, мунады можно понять и без. Они банально представляют некий паттерн.

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

Теперь вспоминает талмуд gof, талмуд с правилами ооп для каждого конкретного языка, необходимость учить интёрналы. Блядь, да это же пожирание времени на хуйню.

Учите короче сишечку, хаскель, ffi и пердон с башем для всяких мелочей. Рельсы с рубями вставьте в анус быдлокодерам.
#411 #471242
>>471187
У тебя просто тупой какой-то вопрос. Для рельс написано столько гемов, что из них можно сразу готовый бейскэмп собрать, условно говоря. Для хачкеля написано примерно нихуя, поэтому все придется пердолить вручную и займет это в 20 раз больше времени.

Покажи хоть один веб-проект на хачкеле сложнее гостевухи.
#412 #471287
>>471188
Вот как раз такие дауны без минимального алгебраического и теоркат бекграунда в результате заглатывают с проглотом, когда продвигаются дальше, со своим макачьим пониманием на уровне "ну манадада ыта такой контейнер короч".

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

Но судя по моим наблюдениям современный программист настолько деградировал, что способен усваивать информацию только со стековерфлоу и из бложиков со смищными картинками. Взять те же монады, - простейшая вещь, для понимания достаточно знаний алгебры за 9й класс и базовых знаний теоркату, которые можно получить за пару вечеров за учебником. Но 90% попробовавших вкатиться в хаскель ниасиливают даже это, и им на помощь спешит служба поддержки даунов с Функторы, аппликативные функторы и монады в картинках. Прочитав подобный высер очередной Раджеш думает что всё понял "аааа, так эта просто такой паттерн как в джява", это блять "такая коробочка для хранения контекста" и прочее говно. Нет господа, до тех пор пока вы будете мыслить по шаблонам как императивный джява слесарь, без капли абстрактного мышления, вы будете сосать хуй в хаскеле. Это язык для тех, в ком умер логик-алгебраист, а не для перекладывающих кирпичики имбецилов-инженегров. Идите нахуй.
#413 #471299
>>471287

> в ком умер логик-алгебраист


почему умер?
#414 #471307
>>471242

>У тебя просто тупой какой-то вопрос.


Что в нём тупого? Я спросил чем Yesod хуже рельсов, ты не смог ответить.

>Для рельс написано столько гемов


А для джавы написано еще больше, что дальше?

>все придется пердолить вручную и займет это в 20 раз больше времени


Что именно придётся пердолить вручную?

>Покажи хоть один веб-проект на хачкеле сложнее гостевухи.


Что-то ты совсем опустился. Ну ладно, покажу: https://www.fpcomplete.com/
#415 #471320
>>471299
Потому что не думаю, что настоящие логики-алгебраисты (во всяком случае публикующиеся в JoA и других топовых журналах) увлекаются хаскелем или программированием вообще.
#416 #471322
>>471320
Будущий логик-алгебраист вполне может увлекаться
#417 #471338
>>471307

>ты не смог ответить.


Я другой анон.

>А для джавы написано еще больше, что дальше?


Значит на джаве тоже быстро написать получится.

>Что именно придётся пердолить вручную?


Примерно все.

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


Авторизация пользователей, права доступа, обсуждения, аттачи – для всего этого уже есть гемы – devise, cancancan, acts_as_commentable, paperclip. Это готовые, проверенные временем решения с подробной документацией как этим пользоваться.

На хаскеле большую часть придется писать вручную.

>https://www.fpcomplete.com/


Ну ладно, хоть один проект нашелся.
#418 #471375
>>471338

>Я другой анон.


Ты взял на себя ответственность влезши сюда со своими гемами.

>Значит на джаве тоже быстро написать получится.


Не значит.

>Примерно все.


Что именно?

>Авторизация пользователей, права доступа, обсуждения, аттачи – для всего этого уже есть гемы


Для Yesod тоже есть, кроме того, если человек решил переписать basecamp, значит то что есть его не устраивает.

>Ну ладно, хоть один проект нашелся.


Демагог хуже хохла.
#419 #471388
>>471375
>>471338
Да что вы ссоритесь, девочки, возьмите да напишите по борде кто быстрее.
#420 #471403
>>471287
Я учу вышку и понимаю её значимость, но для начала программирования на хаскеле это всё нинужно. Я ведь начал как-то с пыхапе/паскалей/васиков/ассемблера 6502 я серьёзно будучи ещё совсем идиотом. Программы писались и как ни странно работали, а навыки, опыт и понимание как сделать лучше и чище постепенно наращивались сами со временем. Вот я и говорю что с хаскелем можно начать и так.

И монада нихера не контейнер. Это абстракция вызова одной функции из другой, из-за которой эти функции зависят друг от друга в некотором порядке, что гарантирует порядок их вычисления. И чистоту не нарушили, и проблему решили. А теоркат засуньте себе в сраку.
sage #421 #471412
>>471403
в каком порядке произойдёт вычисление этих 2х строчек?
ответ обоснуй
...
a <- Just a
b <- Just b
...
#422 #471413
>>471287
Гумманитарий вкатился в тред.
Ты довольно точно описал меня, поэтому реквестирую помощи в изучении

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

#423 #471419
>>471413
Аводея вроде советуют http://www.amazon.com/Category-Theory-Oxford-Logic-Guides/dp/0199237182
Я читал categories for the working mathematician
#424 #471430
>>471412
[code]
(Just a) >>= (\a -> (Just b) >>= (\b -> ... ) )
[/code]

Ленивое вычисление будет сначала выводить значение слева от >>= так как a требуется в выражении справа. Just a вычислится первым.

Раскроем ещё более детально:
[code]
(Just a) >>= f = f a
[/code]

a и f требуется знать по отдельности до того как вычислится f a. Вывод f перед аппликацией f a не будет раскрывать внутри себя (Just b) пока оно не потребуется явно. То есть в любом случае первым выстрелит a внутри (Just a), а затем внутренности f, где ожидает (Just b).
#425 #471436
>>471375

>взял на себя ответственность


Взял. И ответил.

>Не значит.


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

>Что именно?


Перечислил часть списка с конкретными названиями гемов.

>Для Yesod тоже есть


Приведи примеры.

>если человек решил переписать basecamp, значит то что есть его не устраивает


Будто basecamp делали на перечисленных мною гемах. Я пример привел, basecamp был написан тыщу лет назад и возможно там все по-другому. Даже если и так, мало соединить эти гемы, чтобы получить точную копию basecamp'а. Вообще, судя по этой твоей цитате – ты вообще ничего не знаешь о веб-разработке.

>Демагог хуже хохла.


Ты же не будешь спорить с тем, что веб-проектов на хаскеле практически не существует? Круто что ты привел в пример web-ide для самого же хаскеля, проект финансируемый богатым хаскеледрочером, но как-то неубедительно.
#428 #473707
>>472516
Лол нет, конечно. Не ожидал что вопрос окажется таким сложным.

Не представляю как можно стать таким же невероятным задротом как Олег.
Может это на самом деле какой то коллективный конструкт типа Бурбаки или там Холовойчука?
#429 #475225
Есть какая-то литература на тему функционально-ориентированного проектирования? Ну типа как моделировать и декомпозить задачи в термах ФП.
#430 #475257
>>475225
Нету
Потому что такие книги пишут стивы макконеллы и прочие аджайл консультанты, а они пока в фп не заинтересованы.
#432 #476103
Хаскель говно, потмоу что в нем нельзя писать лямбды при помощи ключевого слова lambda.
#433 #476257
>>476103
Bitches dunno bout my let and where!
#434 #476344
Делаю небольшую прогу на хаскелле, прошу помощи.
Есть джва листа с парами чисел, типа вот таких:
[[(-171,-59)],[(-129,37)]]
[[(3,155),(104,240),(177,157),(173,0)],[(4,44),(33,64),(76,62),(94,23),(85,47)]]

Количество подлистов всегда совпадает в обоих.
Как мне из второго листа добавить все элементы подлистов в соотв. им подлисты в первом?
Хочу получить такое:
[[(-171,-59),(3,155),(104,240),(177,157),(173,0)],[(-129,37),(4,44),(33,64),(76,62),(94,23),(85,47)]]
sage #435 #476352
>>476344
zipWith (++)
sage #436 #476354
блядь
"листы" у него
"джва листа"
уебал бы
#437 #476359
>>476352
Спасибо.
>>476354
Ну и уебывай отсюда
#438 #479189
как, где начать учить язык ? есть онлайн-обучалки ?
sage #439 #479318
>>479189
Зачем тебе?
#441 #479434
>>479189
Try this
shuklan.com/haskell
#442 #479540
55 Кб, 604x604
#443 #479654
>>473707
maxim.livejournal.com
?
#444 #480706
>>479189
https://www.fpcomplete.com/school/starting-with-haskell/haskell-fast-hard
Все примеры можно тут же в онлайн-IDE потыкать.
#445 #480787
>>479654
Вроде нет. Не вижу ссылки на ftp. И про буддизм как то не задорно совсем.
#446 #481689
>>419858
Хочу считать белки. Нужон ли мне хаскелль?
#447 #481716
>>481689
Можно, но лучше на пердоне.
#448 #484688
Haskell
#449 #484796
>>481716
Лучше на Go же.
#450 #487883
Вот изучил я Haskell, вроде и нравится все, и по полочкам разложено. Но вот написание чего то более сложного чем helloworld вызывает жуткую боль в мозгу, бывает сидишь неделями с карандашом в руках пытаясь какую то архитиктуру выстроить, в то время как на perl'e все было бы готово не так красиво и работающее через жопу, но было быпо образованию я не программист и не математик. Библиотек нужных мало, проектов на github'e тоже почти нет.

Так вот пришел я сюда, чтобы совета просить, может чего по теоркату или алгоритмам каким почитать чего. А может проще перейти на skala, вроде как и куча библиотек, да и говнокодить проще но от синтаксиса все таки подташнивает, после хаскеля то
#451 #487892
>>487883
Ах да, забыл уточнить. Основную боль, унижение и депрессию haskell принес мне при написании gui под windows кого я обманываю, я даже библиотеки собрать не смог. Ну и при скачивании видео с ютуба, приходится дергать питоновский скрипт.
#452 #487895
>>487892
Чертова макаба похерила спойлеры.
#453 #487918
>>487892
Haskell под windows - это уже боль.
#454 #487936
>>487918
Виндовс - это уже боль.
#455 #488010
>>487918
Haskell - это уже боль.
sage #456 #488076
>>488010
>>487936
Боль - это уже боль.
#457 #489723
>>487883
>>487892
Удваиваю этого спермоблядка. Книженции/статейки по проектированию/архитектуре/типовым решениям в фп/хачкиле в частности завезли или нету?
31 Кб, 500x470
#458 #490063
Есть множество объектов, со следующими атрибутами: подстрока, максимально кол-во символов в строке, минимальное кол-во символов в строке. По исходной строке требуется найти соответствующий элемент в данном множестве. Например:
1 - (4415, 3, 8)
2 - (44159, 6, 7)
3 - (44, 4, 9)
4 - (441, 3, 5)
Тогда:
441 - соответствует 4-му элементу
4415 - соответствует 1-му элементу
44159 - соответствует 1-му элементу
441599 - соответствует 2-му элементу
44159999 - соответствует 1-му элементу
441599999 - соответствует 3-му элементу
4416 - соответствует 3-му элементу
Можно-ли на Haskell реализовать элегантное и быстрое по времени выполнения поиска решение задачи? Если нет, в сторону какого языка посоветуете смотреть? Спасибо.
#459 #490143
>>489723

>Книженции/статейки по проектированию/архитектуре/типовым решениям в фп/хачкиле в частности



Факториал не умеешь написать?
#460 #490153
>>490063
Ты говоришь о поиске подстроки, либо о поиске по префиксу? У тебя все примеры с 44 начинаются.
sage #461 #490154
>>490063

> Можно-ли на Haskell


нельзя

> посоветуете


джява
141 Кб, 879x536
#462 #490193
>>490153

>подстроки, либо о поиске по префиксу


Задача - по полному номеру телефона найти его префикс (ну или диапазон номеров). В общем случае полный номер может совпадать с префиксом.

>все примеры с 44 начинаются


Ну просто показал частные случаи, чтобы принцип поиска был понятен. Что угодно может.
>>490154

>джява


Спасибо. Уже есть решение на C#. JIT не нужен.
Собственно от Haskell ожидаю эффект как на пикче.
#463 #490244
>>490193
На пикче тормозит.
20 Кб, 174x570
#464 #490393
>>490193
Ну да, тормозит. Суть не в этом, суть в том, что вместо кодинага на С#, фактически декларировать алгоритм. Очевидно, что сходу понять реализацию алгоритма на Haskell (если конечено знать его и вообще понимать ФП), гораздо проще, чем на С. Хотя бы потому, что код на Haskell существенно компактней. Относительно реалилзации моей задачи: сейчас множество префиксов представлено в виде дерева, где каждый узел - символ в префикса. Каждый уровень Узел может иметь до 10 ссылок на дочерние элементы (если кончено в использовать только цифры) и опционально макс. и мин. допустимое количество в полном номере (по которому собственно выполняется поиск). Тогда для множества, приведенного выше дерево вырождается в список из 5 узлов (да неудачный пример). Можно ли на Haskell (ну или Erlang) реализовать подобную структуру и алгоритм поиска?
#465 #490395
>>490393
Конечно можно, принцип точно такой же. И код будет компактнее, но далеко не факт, что напишешь ты его быстрее.
#466 #490405
>>490395

>не факт, что напишешь ты его быстрее.


Ну это я уже понял, ибо переключиться с императива на функциональность - это адский ад. Но надо, ибо мозги костенеть начинают.
#467 #490423
>>490193

>Задача - по полному номеру телефона найти его префикс


Префиксов сотовых операторов - несколько сотен. Даже самый тупой алгоритм, вроде сравнения с каждым из префиксов, будет работать.
#468 #490475
>>490423

>сотовых операторов


А я не говорил, что только сотовых операторов. Сейчас в базе вижу 21 тысчу записей телефонных префиксов.
#469 #490479
>>490475
Ну сформулируй тогда задачу так, чтобы можно было однозначно понять, что тебе нужно. Подозреваю, что реашается префиксным деревом, просто из твоего объяснения ничего не понятно.
#470 #490499
>>490479
Ну например префикс Челябинской области 7351 с минимальной длиной номера = 4, а Челябинска 73512 с минимальной длиной номера = 5 (для данного случая максимальная длина номера не ограничена, она используетя для коротких номеров и SMS-ок). Не смотря на то, что Челябинск в Челябинской области, для него выделен отдельный поддиапазон, который надо иднетифицировать по полному набранному номеру. И вот таких поддиапазонв в диапазонах может быть много, и теоретически уровней выделения поддиапазонв из поддиапазонов также может быть много. И даже больше, набранный номер может быть и не номером, а APN-ом, например "internet.beeline.ru" (но пока только цифры для простоты).
Кстати просто перебор может и не подойти. Например если набранный номер 73512 - то идентифицирован будет префикс Челябинсокй области. То есть тут пришлось бы запоминать последний "наилучший" вариант префикса и замещать его каждый раз когда будет найден еще более лучший "вариант".
#471 #490511
>>490499
берешь такой и сортируешь префиксы в лексикографическом порядке. Это будет массив префиксов.
После этого проходишь по номеру слева направа, берешь одну цифру, потом две и т.д.
Находишь первый и последний префиксы в массиве, которые начинаются с этих цифр. Бинарным поиском.
Если эти два префикса совпадают - то поздравляю, ты его нашел.
Если эти два префикса разные - то у тебя сужается диапазон поиска, берешь на одну цифру больше и ищешь опять.
Если таких префиксов нет, то номер ни из рахи
#472 #490514
>>490511
Если строки не нравятся, то можешь нулей дописать
#473 #490515
>>490511
Вот здесь есть реализация похожего на хаскелле http://nlpwp.org/book/chap-ngrams.xhtml#chap-ngrams-suffixarrays
#474 #490519
>>490499

>префикс Челябинской области 7351 с минимальной длиной номера = 4, а Челябинска 73512 с минимальной длиной номера = 5


Да, на самом деле тут три диапазона
[735111111,735119999] - Челябинская область
[735121111,735129999] - Челябинск
[735131111,735999999] - Челябинская область
а [7351,4] и [73512,5] - их компактное представление, которое становится еще более компактным в виде дерева, вырожденного в список [7,]-[3,]-[5,]-[1,4]-[2,5]
#475 #490525
>>490511
>>490515
Да, я понял тебя. Это похоже на поиск по дереву, но.

>берешь на одну цифру больше и ищешь опять.


Если префиксы представлять в виде дерева, то на каждой очередной итерции с новой цифрой, пространство поиска будет ограничено множеством дочерних узлов дерева. А здесь придется по всему диапазону каждый раз бегать.
sage #476 #490550
>>490499
Пиздец, тут нужна помощь не программиста, а аналитика. Этим я не хочу заниматься.
sage #477 #490570
>>490550
Да ладно тебе, с исходными данными понятно
7351XXXXX - Челябинская область
73512XXXX - Челябинск
735124XXX - допустим центр Челябинска
набранный номер 7-(351)-2-42-31 - попадает и в Челябинскую область и в Челябинск и в центр Челябинска, но идентифицирован должен быть именно как центр Челябинска. Тут как бы два уровня вложенности выделения поддиапазона из поддиапазона.
#478 #490720
>>490525
на шаге N у тебя есть min[n] и max[n], на шаге N+1
min[n] < min[n+1] <= max[n+1] < max[n]
так что одно и тоже, что и с деревом.
#479 #490722
>>490720
ах, забыл пояснить, что двоичный поиск же принимает в качестве аргументов min и max индекс
#480 #490758
>>490720
>>490722
Да, ты прав, на каждой итерации количество кол-во элементов для бинарного поиска уменьшается. Но в решении с деревом, на каждой итерации максимально количество элементов <= 10, то есть по количеству цифр. Значит время поиска по сортированному списку зависит от количества элементов в списке и от количества символов в набранном номере, а время поиска по дереву зависит только от количества символов в номере. Хотя реализация поиска по списку выглядит существенно проще. Спасибо за наводку, буду думать.
#481 #490843
>>489723
>>487883
https://wiki.haskell.org/Category:Idioms
если не можете что-то большое разбить на части — учите ооп

>А может проще перейти на scala, вроде как и куча библиотек, да и говнокодить проще


а ты знаешь java? в скале действуют те же принципы, что и в хаскеле, только ебаная система вывода типов и развитое ооп, с которым, очевидно, у тебя и проблемы.
#482 #490881
>>490758

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


нет, время поиска зависит от высоты дерева, а высота дерева зависит от числа элемнотов в нем.
#483 #490884
>>490881
Длина дерева никогда не будет больше длины номера (в отличии от длины списка). Его решение с деревом - эффективное и совсем несложное, зачем хуйню советуешь?
#484 #490887
>>490884
Я утверждаю, что они эквивалентны.
Дерево сложнее построить чем список, например.

> Длина дерева никогда не будет больше длины номера (в отличии от длины списка)


> Длина дерева


> Длина дерева


> Длина дерева


> Длина дерева


Если в номере n цифр, то максимальное колиечество префиксов, что в дереве, что в списке 10^n, сложность поиска логарифмическая что там что там, так что ассимптотически будет n. У дерева будет лучше константа, что компенсируется сложностью построения дерева.
#485 #490888
>>490887

> в списке


в массиве конечно же.
#486 #490889
>>490887
Сложность поиска в дереве - константа (если точнее - O(N), где N - высота дерева), если оптимально для скорости делать.
#487 #490890
>>490889
Ну и для большинства практических применений дерево будет строиться один раз, а номера искаться - много раз.
#488 #490892
>>490889
Перечитай >>490889 я там написал про это.
Сложность поиска в отсортированном массиве тоже O(N) - где N - высота эквивалентного бинарного дерева поиска.
#489 #490893
>>490890
Это да.
#490 #490894
>>490892
Но сам бинарный поиск же - логарифм от кол-ва префиксов, если препроцессинг не делать.
#491 #490897
>>490894
в дереве тоже переход на следующий уровень не константа.
Хотя, ладно, уговорил, получается O(N log N) для массива.
#492 #490902
>>490897
Константа, если памятью пожертвовать. Делать в каждой ноде массив из 10 ссылок/указателей/Maybe и проверять сразу для нужной цифры - есть там что или нет.
#493 #490909
>>490881
Ну если длина набранного номера 5 символов, то ниже 5 уровня по дереву прохода не будет. Хотя высота дерева может быть больше.
#494 #490925
Чот вы всё кукарекаете да кукарекаете, уже запилил бы кто.
[code lang=haskell]
data PrefixTree a = PT (Map a (Maybe (X a), PrefixTree a))

findX :: PrefixTree Int -> Int -> [Int] -> Maybe (X Int)
findX _ _ [] = Nothing
findX (PT tree) len (x:xs) = do
(v, tree') <- M.lookup x tree
findX tree' len xs <|>
mfilter (flip inRange len . range) v
[/code]

Как-то так будет. Сейчас в метро. Доберусь до компа — напишу нормально.
#495 #490977
>>490925
Мозг ломаешь мне. Хотя я этого и ожидал. На Erlang-е, я так понимаю, синтаксис будет примерно такой-же. Судя по его особенностям и моим задачам - он мне больше Haskell-я подходит.
#496 #491222
>>490977
На эрланге и код отличаться будет.
#497 #491281
>>491222
От блин. Я так понимаю Erlang тут вообще не в почете. Почему так сложилось?
#498 #491282
>>491281
Если вкратце: динамикодрисня.
#499 #491286
>>491282
Лисп тоже динамикодрисня, но его тут уважают.
На самом деле у борщехлебов бомбит от того, что на Erlang можно зарабатывать деньги, а на их лиспах/хаскелях - нет.
#500 #491301
>>491282
Ну хз, по моему динамикодреся - еще не повод.
#501 #491388
>>491301
это статикодебилы, чего ты хотел?
#502 #491634
>>490843
С разбиением большого на малое проблем у меня не возникает

>учите ооп


Да, уже поставил Visual Studio
#503 #491819
Короче вкурил я немного эрланга, и решил попробовать самостоятельно реализовать поиск по дереву префиксов. Буду здесь потихоньку постить рассуждения и код, а анон надеюсь меня поправит\направит.
Итак, узел дерева это кортеж, состоящий из: символ префикса, идентификатор префикса, минимальная длина номера, максимальная длина номера, список дочерних узлов-кортежей. Все параметры кроме символа префикса опциональны. Тогда, функция, выполняющая поиск по дереву должна принмать следующие параметры: список, содержащий символы набранного номера, текущую позицию символа, длину списка набранного номера (дабы не вычислять ее в каждом рекурсивном вызове) и собственно само дерево, по которому выполняется поиск.
%пустое дерево
prefix_find(_, _, _, []) -> 0;
%путой набранный номер
prefix_find([], _, _, _) -> 0;
%нулевая длина набранного номера
prefix_find(_, _, 0, _) -> 0;
%номер не соответсвует ни одному префиксу
prefix_find(_, N, PhoneLen, _) when N > PhoneLen -> 0;
%найден префикс, в которой может входить набранный номер
prefix_find(Phone, N, PhoneLen, PrefixTree)
when element(2, PrefixTree) /= 0 , element(3, PrefixTree) =< PhoneLen , element(4, PrefixTree) >= PhoneLen -> Id1 = element(1, PrefixTree),
1.
%Но поиск по дереву должен быть продолжен, так как номер может входить в другой, более "строгий" префикс
%То есть, необходимо найти в списке в списке кротежей element(5, PrefixTree) кортеж, первый элемент коорого равен list:nth(N, Phone)
Собственно как реализовать поиск по списку кортежей, с критерием поиска = значение первого элемента кортежа? Или в эрланге какой-нибудь Map есть?
#504 #491835
Блин, бамплимит что-ли?
#505 #492108
>>491819
Нахуй тебе энларг ё пенис? На нем не получится более лаконичного кода и сам он тормоз лютый.
#506 #492215
>>492108

>Нахуй тебе энларг


Масштабируемость, откзоустойчивость, многопоточность, высоконагруженность - вот это все.

>На нем не получится более лаконичного кода


Ну даже если он не будет таким лаконичным как на Haskell - ничего страшного.

>тормоз лютый


Личный опыт? Или может есть бенчмарки какие?
#507 #492414
#508 #492574
Двачик, посоветуй почитать хорошего¹ прикладного² кода на простом³ Хаскеле.

1. Код должен следовать принятым в сообществе best practices.

2. Код должен воплощать логику, обусловленную извне. Например, распознаватель капчи - годится, а parser combinator library - нет.

3. Я дочитываю RWH, написал несколько сотен строк кода. Из этого я понимаю абстракции по monad transformers включительно. Я хочу посмотреть, как на этих абстракциях пишут настоящие программы. Чем меньше мне придётся при этом познать новых абстракций, таких как GADT и lenses, - тем лучше.
#509 #494627
>>492574

>Чем меньше мне придётся при этом познать новых абстракций, таких как GADT и lenses,



Ну у тебя и запросы, братюнь. Один серьезный минус хаскеля в том, что эти абстракции незаметно липнут к тебе с течением времени, и к тому моменту, как студент начавший изучать хаскель по приколу пишет свой распознаватель капчи, его образ мышления обрастает линзами, шаблонами, стрелками и прочей квазиквотацией.
Тред утонул или удален.
Это копия, сохраненная 30 июня 2015 года.

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

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