[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.11962 Reply
File: Haskell-Logo-Variation.png
Png, 7.93 KB, 128×128 - Click the image to expand
edit Find source with google Find source with iqdb
Haskell-Logo-Variation.png
Haskell-тред будет здесь.
>> No.11963 Reply
>> No.11972 Reply
И сразу вопрос: почему такая отличная штука, как гарды, не бывают вложенными?
>> No.11973 Reply
>>11972
Зачем?
>> No.11974 Reply
>>11973
Для эстетики. Всяко лучше нагромождений if-then-else.
>> No.11975 Reply
>>11974
Во-первых используй декомпозицию, Люк. Если у тебя несколько вложенных матчеров, есть повод выделить несколько функций. Во вторых есть монада Maybe, есть стрелки, есть Alternative, короче куча способов собрать алгоритм без всяких if-then-else.
>> No.11976 Reply
File: Я ничерта не вразумел.JPG
Jpg, 94.22 KB, 516×586 - Click the image to expand
edit Find source with google Find source with iqdb
Я ничерта не вразумел.JPG
>>11975
ОК, но тогда у меня платиновый вопрос. Что такое, блджад, монады, что они делают и зачем нужны? Я перечитал три-четыре их описания с предсказуемым (пик рилейтед) результатом.
>> No.11977 Reply
>>11976
> Что такое, блджад, монады, что они делают и зачем нужны?
Если ты думаешь, что можно вот так просто объяснить всю суть монад, ты ошибаешься. Понимание монад приходит само лишь после многолетних практик.
>> No.11978 Reply
File: 1251152615001.jpg
Jpg, 49.07 KB, 600×400 - Click the image to expand
edit Find source with google Find source with iqdb
1251152615001.jpg
>>11977
Okay.jpg.
>> No.11979 Reply
>>11978
Спок, бро. Я вообще лиспер-мимопроходил и просто пошутил на счет сложности монад. тоже сам ничего не понял, да и не пытался особо
Лучше дождись настоящего хаскелль-куна.
>> No.11980 Reply
>>11979
Ладно. На самом деле, скорее всего, всё будет так, как ты и описал. По крайней мере с указателями в си у меня так и было.
>> No.11981 Reply
>>11979
ты слишком добрый, надо было побольше крови и добра
>> No.11982 Reply
>>11976
Рекомендую http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html
Перевод тоже вроде был, если надо - поищи сам.
>> No.11983 Reply
File: macro-доброчан-же.JPG
Jpg, 45.46 KB, 651×800 - Click the image to expand
edit Find source with google Find source with iqdb
macro-доброчан-же.JPG
>>11981
> ты слишком добрый
>> No.11984 Reply
>>11976
Из последнего, с картинками: http://blog.ezyang.com/2010/07/flipping-arrows-in-coburger-king/
Ну и тайпклассопедия, бладж, заебался копипасту постить: http://www.haskell.org/wikiupload/8/85/TMR-Issue13.pdf
>> No.11985 Reply
>>11976
Я тоже нихуя не хаскелист (не добрался ещё), но до меня доходили слухи, что монады это такая хуйня, которая позволяет не закрывать очи в несовершенном мире. Хаскель же йоба-функциональный, весь насквозь иммутабельный и без побочных эффектов. Но проблема в том, что вся эта хуйня не имеет никакого отношения к реальному миру, который очень даже мутабельный, и любая программа бесполезна без побочных эффектов, как, например, вывод информации на экран и плавно анимированные менюшки. Поэтому для спасения хаскелемирка необходимо обеспечить безопасные побочные эффекты через монады.

Но это всё так, конечно, бред сумасшедшего, вообще не знаю, зачем я это сейчас пишу.
>> No.11986 Reply
мондада - контейнер
бинд - для извлечения данных (<-)
ретурн - для возврата обратно (return)
do-нотация - синтаксический сахар над этими двумя операциями
>> No.11987 Reply
>>11985
Важное замечание изучающим монады номер N: не только IO.
>> No.11988 Reply
>>11987
ты имел ввиду, что монады существуют не только для ввода/вывода, так? а то я немного не понял твое предложение

ни разу не хаскел, просто внимательно слежу
>> No.11989 Reply
>>11988
Да, именно. Есть ещё List, Maybe, State и другие.
(IO - стандартная монада для вычислений, взаимодействующих с внешним миром)
>> No.11990 Reply
File: 1238823641885.jpg
Jpg, 23.84 KB, 465×468 - Click the image to expand
edit Find source with google Find source with iqdb
1238823641885.jpg
>>11982 Я так понял, что монада — это такая штука, которая на входе волучает функции, компониует их и выдаёт новые скомпонированные значения, так? Если так, то как это мне поможет избавиться от if-then-else?
>> No.11992 Reply
Наткнулся тут на такое

I did extensive research on all of the most popular functional languages last
year, including Haskell. In case you are trying to do something similar, I'll
warn you that almost all of the examples of Haskell's use in industry are
fakes, e.g. companies that have no products, companies that have one product
that never used Haskell, companies that happen to have two Haskell advocates
working for them out of 150 developers, companies where one employee once did
a preliminary Haskell program but nothing since and, finally, plain old spam
where companies that have never had anything to do with Haskell have hijacked
the Haskell site to advertise on-line only to be hailed as a "real world"
example of Haskell in industry by its proponents. I was rather baffled when I
discovered this and have never seen behaviour like it.

Dr Jon D Harrop (автор книги Ocaml for scientists)
>> No.11993 Reply
>>11962
Если судить по ответам в тред, то /s/ — доска лисперов, постящих в каждый тред: «Выучи уже хачкель, мудак.» ради высшей справедливости.
>> No.11994 Reply
>>11992
А можно ссылку на эту цитату? Очень годно, буду постоянно цитировать хаскелелюбам
>> No.11995 Reply
>> No.11996 Reply
>>11992
> companies that happen to have two Haskell advocates
working for them out of 150 developers
Это он про прософт, инфа 100%.
>> No.11997 Reply
File: seikon-no-qwaser-fifth-episode-nopan.jpg
Jpg, 58.09 KB, 480×526 - Click the image to expand
edit Find source with google Find source with iqdb
seikon-no-qwaser-fifth-episode-nopan.jpg
>>11976
Смотри, есть такой раздел математики - абстрактная алгебра.
Его суть заключается в том, чтобы абстрагироваться от содержимого множеств (полиморфизм).
Операции вместе со своими свойствами над произвольными множествами порождают структуры.
Простейшая структура - магма (или группоид) - это тупо множество и замкнутая относительно него бинарная операция.
Все остальные структуры являются уточняющими подклассами магмы и образуют витиеватую иерархию.
Если о операции в магме известно, что она ассоциативна, то такая магма называется полугруппой,
если о полугруппе известно, что у её операции на её множестве есть обратный элемент, то такая полугруппа называется моноидом и т.д. Так вот, мондада - не контейнер ни разу. Maybe - контейнер, IO - контейнер, а соответствующие мондады - это варианты функций bind@join@return, образующие моноид вместе со множеством отображений из множества-значений-погруженных-в-данный-контейнер в себя.
>> No.11998 Reply
>>11992
Это просто ml-ёб батхуртит от того что в верблюжьем говне все делаешь, а ничего нет, зато на сайте написано, что ocaml - практичный язык. Нападки на Хаскелл среди ml-ёбов распространены весьма.
>> No.12001 Reply
На самом деле, монады были бы вполне понтны, если бы ну хоть кто-нибудь сколь-либо нормально разъяснял, как работают классы типов и вообще типы.
>> No.12005 Reply
File: 1234131821424.jpg
Jpg, 36.58 KB, 249×316 - Click the image to expand
edit Find source with google Find source with iqdb
1234131821424.jpg
> parse error (possibly incorrect indentation)
А-А-А-А-А-А-А-А-А-А-А-А-А-А! Ну зачем!? Зачем они добавили эту гвидопыховкую идентацию?
>> No.12006 Reply
>>12005
Няша, это не хаскеллисты добавили гвидопыховую идентацию, это Гвидо утащил идею отбивать отступами блоки из хаскеля. Возьми вменяемый редактор и не еби себе мозги. В емаксе, например, хаскель-мод шикарно с отступами работает.
>> No.12007 Reply
>>12006
т.е. в хаскелле тоже блоки кода выделяются с помощью отступов, никаких скобочек? надо почитать о нем, что ли.
>> No.12009 Reply
Хаскебоги, посоветуйте мне какую-нибудь серьезную литературу от основ, до полного просветления. Чтобы теоретические основы и использование и лямбда исчисления, и комбинаторной логики; и плюшки всякие: строгое определение монад, вычмат на примерах и так далее. Хочу осилить что-нибудь поболее написания факториалов.
>> No.12010 Reply
>>12006
> это Гвидо утащил идею отбивать отступами блоки из хаскеля
Няша, ты хоть в курсе, когда был создан питон, а когда этот ваш хаскель?
>> No.12011 Reply
>>12009
> Хочу осилить что-нибудь поболее написания факториалов.
Но зачем? Знания написания факториала на хаскелле вполне достаточно для того, чтобы повыпендриваться на бордах.
>> No.12013 Reply
>>12010
Миранда, ака прото-хаскелл, из которого он синтаксис утащил, в 85 появилась.
>> No.12014 Reply
>> No.12018 Reply
>>12011
Но, лол, я не хочу выпендриваться на бордах, я хочу писать что-нибудь нормальное на этом божественном языке. Как я могу, скажем, писать что-то нормальное на каких-нибудь жабах. :3
>> No.12022 Reply
File: Shiro_helps_ganta.jpg
Jpg, 81.82 KB, 500×281 - Click the image to expand
edit Find source with google Find source with iqdb
Shiro_helps_ganta.jpg
>>12018
Зачем же ты надумал писать что-то нормальное на языке, которого совсем не знаешь? Не лучше ли написать что-нибудь нормальное на языке, который ты знаешь, а значит и можешь оценить степень подходящести его к задаче?
>> No.12025 Reply
>>11997
define "Операции"
define "своими свойствами"
define "структуры"
define "замкнутая относительно"
define "уточняющими подклассами магмы"
define "витиеватую иерархию"
> мондада - не контейнер ни разу.
> Maybe - контейнер, IO - контейнер
Maybe, IO не монады? /0
define "join"
>> No.12026 Reply
>>12022
Одна из целей изучения — найти потенциальные области применения. Лучше литературы посоветуйте. Что нужно а что нет как-нибудь разберемся.
>> No.12027 Reply
>>12026
Сам не читал, но говорят, что «Real World Haskell» — ничего так.
>> No.12028 Reply
>>12026
Начинай с The Haskell School of Expression дальше читай Typeclassopedia (http://www.haskell.org/wikiupload/8/85/TMR-Issue13.pdf), дальше статьи по ссылкам в тайпклассопедии, викикнигу (http://en.wikibooks.org/wiki/Haskell), а точнее отдельные главы. Ну и вики на haskell.org.
Некоторые няшечки могут посоветовать Душкина (беги от этой книги, как от чумы), Грема Хаттона или "Изучи себе хаскель во имя великой справедливости" - не слушай их, только напрасно потратишь время.
Ну а после изучения нормального языка программирования уже сам решишь, нужен ли тебе этот самый нормальный язык программирования.
>> No.12032 Reply
>>12028
Надо же, много знакомых книг, ибо за Грема Хаттона брался и осилил. Там есть неплохие примеры, как мне показалось, например те же монадические комбинаторы парсеров. Душкин славный словоблуд, дропнул книгу после главы про основы комбинаторной логики. И за The Haskell School of Expression хотел принятся, но пока руки не дошли.

Что скажешь о The Haskell Road To Logic, Math and Programming? Дропнул на главе про множества, ибо программирование и логика там крайне непропорционально смешанны. Стоит ли дочитывать?

Енивей, спасибо за литературу, будет что почитать на выходных.
>> No.12033 Reply
>>12032
> Что скажешь о The Haskell Road To Logic, Math and Programming?
По-моему ты у меня уже про неё спрашивал и я что-то отвечал.
И не пытайся найти серьезную литературу от основ, до полного просветления. Начни с чего-нибудь простого и нескучного, просто чтобы изучить сам язык, как освоишься, просто читай различные статьи на любую интересующую тебя тему. Тысячи их.
>> No.12035 Reply
О мудрые Анонимные Иксперты, подскажите, почему
kk = (*10^6)
выводит тип Integer -> Integer,
а не Num a => a -> a ?
>> No.12037 Reply
Ну раз уж тут такая движуха, я тоже поинтересуюсь.
1. Как в Хаскелле со всякой там длинной арифметикой искаропки? Есть ли ограничение на размер целого чила, если да - сколько и что вернёт функция "неуложившаяся" в лимит?
2. Как там нынче с библиотеками дела? Много ли написано для практических нужд? Глючные? Что там с базами данных, работой с PDF и DjVu, прикреплением всяких ВебКитов, GUI?
3. Хорошо ли биндится к другим, более популярным языкам?
4. Как там при всей этой иммутабельности получается писать всякие НС, FSM, всякую мишуру для дата майнинга ну и вы понели. Как-то глядя со стороны мне сейчас многие вещи кажутся очень неудобными в отсутствие императивности. Как на практике? Всё хорошо и выходит проще написать отдельно и прилепить к Хаскеллю? Правда, тогда непонятно зачем он вообще нужен...
>> No.12038 Reply
>>12037
1. Нормально. Есть ограниченные типы, есть неограниченные. Довольно хорошо проработано. Все ограниченные являются экземплярами класса типов Bounded и реализуют его minBound и maxBound:
http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:maxBound
Операции с bounded-типами происходят как обычно: по модулю со сдвигом для знаковых и без сдвига для беззнаковых. Некоторые особо хардкорные алгебраисты юзают альтернативную стд-либу NumericPrelude в которой вообще области целостности на квазигруппах сидят и коммутативными кольцами погоняют.
3. Язык статический, ультратипизированный, потому с ffi всё достаточно ок.
4. Фича вовсе не в отсутсвии мутабельности, а в чётком разделении "чистого" кода и "грязного", а еще в том, чтобы сделать весь контрол-флоу максимально явным и за счёт этого предоставить больше свобод для его декомпозиции, структурирования, комбинирования и т.д. Многие алгоритмы хорошо кладутся на иммутабельные и персистентные структуры, но далеко не все. Ничего плохого нет, чтобы в хаскеле пользоваться мутабельными массивами.
>> No.12040 Reply
File: fstar.png
Png, 16.61 KB, 359×360 - Click the image to expand
edit Find source with google Find source with iqdb
fstar.png
Что об этом думают местные лямбда-самцы?

http://research.microsoft.com/en-us/projects/fstar/
>> No.12041 Reply
File: 1234925313077.jpg
Jpg, 44.62 KB, 660×400 - Click the image to expand
edit Find source with google Find source with iqdb
1234925313077.jpg
>>12040
> .NET
Дальше не читал.
>> No.12044 Reply
>>12040
Бля, у майрософт ресёча сотни проектов и каждый охуительнее другого.
И большинство в результате как-то притихает.
http://research.microsoft.com/apps/dp/pr/projects.aspx#p=1&ps=36&so=1&sb=&fr=&to=&fd=&td=&rt=&f=a&a=&pn=&pa=&pd=
>> No.12064 Reply
File: SNC00094[1].jpg
Jpg, 327.03 KB, 1280×960
edit Find source with google Find source with iqdb
SNC00094[1].jpg
File: 1310163851517.jpg
Jpg, 206.25 KB, 656×981
edit Find source with google Find source with iqdb
1310163851517.jpg
File: 12784303872385.jpg
Jpg, 122.84 KB, 512×512
edit Find source with google Find source with iqdb
12784303872385.jpg
File: IMG_7041.JPG
Jpg, 259.97 KB, 1024×764
edit Find source with google Find source with iqdb
IMG_7041.JPG
File: sample-a5695d3cc4...
Jpg, 265.97 KB, 850×1202
Your censorship settings forbid this file.
r-18

>>12040
У меня батхёрт. Почему опять ML-говно, а не божественный Хачкель?
>> No.12066 Reply
>>12064
Я думаю, потому что SPJ и свита не дают спермософту анально перепатентовать и огородить хачкель,
а им только это и нужно от "инноваций". В сишарп, например, каждая 2я мелочь запатентована.
Например, синтаксис лямбд, лол.
>> No.12068 Reply
>>12064
Няшные фоточки, кстати.
>> No.12069 Reply
>>12064
Ебаный Джим Керри. Уж вечное сияние чистого разума так вечное сияние ^__^
>> No.12086 Reply
>>12064
Мсье пишет в студии за двумя RDP?
>> No.12087 Reply
>>12043
>>12064

хочу еще этой няшки
>> No.12089 Reply
File: 1310253641483.jpg
Jpg, 125.67 KB, 800×536
edit Find source with google Find source with iqdb
1310253641483.jpg
File: 1310641541608.jpg
Jpg, 775.41 KB, 1205×2048
edit Find source with google Find source with iqdb
1310641541608.jpg
File: y_2eaff207.jpg
Jpg, 101.67 KB, 800×536
edit Find source with google Find source with iqdb
y_2eaff207.jpg
File: w_7b941c74.jpg
Jpg, 596.66 KB, 1043×2048
edit Find source with google Find source with iqdb
w_7b941c74.jpg

>>12066
Скорее MS просто не оплачивает увлечения SPJ и компании, а раз нет денег - нет мультиков. А на счет огораживания ты прав, была бы возможность огородить - огородили бы лицензии ресёча умиляют например - вообще нет никакого стимула тратить время на их проекты даже не потому, что ональное рабство, а потому, что коммерческой лицензии может не случиться в принципе, как это происходит с большинством проектов Но такой возможности нет, наверное поэтому и пилят какое-то своё ML-говно, которое хуже, зато родное.
>> No.12176 Reply
Я вот сейчас читал на хабре http://habrahabr.ru/blogs/hi/125398/ и вот о чём подумал. Большая часть описываемых проблем как раз в недостатке "однотипных", шаблонных действий во всяких там цппях. Значит ли это, что на каком-нибудь лямбда языке вроде Хаскеля можно спокойно лепить свои map-ы и всё распараллелится и будет быстрее Сишки? Алсо, никогда OpenCL в глаза не видел и даже не знаю, можно ли это вообще к Хаскелю прицепить. Так что вопрос и правда в стиле "лень гуглить - спрошу у анона", прошу проявить снисхождение.

И вот ещё. Сегодня читал про Clojure и наткнулся на фразу "т.к. JVM не поддерживает оптимизацию хвостовой рекурсии..." сначала я было хотел усмехнуться, типа, и тут из Лиспа ничего хорошего не вышло, но не успел - настолько быстро меня охватило состояние охуевания. Как же так? А как же Скалка? Вся эта функциональщина же жить не может без хвостовой рекурсии. Это что же, получается, на JVM в принципе нельзя склепать ничего толкового? И все мои надежды и радости, что мол, наконец Scala используется во всяких твиттерах и тихонько становится мейнстримом - напрасны?
Нет, серьёзно, Clojure и Scala же не дураки писали. Как они могут сколько-нибудь нормально работать без оптимизации хвостовой рекурсии? Или книжка мне просто напиздела и всё ок?
>> No.12177 Reply
>>12176
> на JVM в принципе нельзя склепать ничего толкового?
Дошло, наконец.
>> No.12178 Reply
>>12176
В скакалке хвостовую рекурсию на костылях эмулируют. В простейшем случае все работает, чуть сложнее - скакалка сразу же разваливается. >>9809
Кложурасты же циклами обходятся, как в фортранчике 50 лет назад.
>> No.12179 Reply
>>12178
в чем же профит тогда от этого всего?
мимокрокодил
>> No.12180 Reply
>>12089
спасибо, жизнь наладилась это по поводу картиночек, добра тебе
>> No.12181 Reply
>>12178
Ты говоришь «фортранчик» и «50 лет назад» так, как будто циклы не работали как надо, без каких-либо претензий, все эти 50 лет.
>> No.12183 Reply
>>12181
Лопата верно служит человеку еще со времен неолита(тогда она называлась «палка-копалка») и несомненно будет широко использоваться еще долго после того, как мы все умрем. Но с тех пор появились более технологичные способы копать ямы. Сечешь?
>> No.12184 Reply
>>12178
Пиздец, вот это грустнота так грустнота. Прям словно целый мир рухнул, хотя я вроде и не лямбдоёб-то. И как теперь жить? Охотно верю во всё это "развитие Хаскеля", "оптимизацию Руби" и всякое прочее - даже "избавление от GIL в Пайтоне", но JVM-то на то и есть JVM, ничего с ней не сделается же.
И что ж тогда, Скалка - мертворождённый язык? А как же эта вся движуха с Твиттером? Или я зря расстраиваюсь и там вполне можно комфортно писать без хвостовой рекурсии ну и вообще (хотя, блджад, я вообще с трудом себе представляю, как без неё можно эффективно использовать тот же паттерн матчинг) всё не так страшно?
А зачем тогда Кожура нужна и вовсе непонятно. Правда, её недоделанность меня не расстравивает, не шибко-то мне она и нравилась. Но Лисп без ХР это анекдот какой-то, на самом деле.
>> No.12185 Reply
>>12184
Это скалка без ТСО - анекдот какой-то, а кожура - нормально. В common-lisp в стандарте тоже ничего нет о хвостовой рекурсии, это просто sbcl такой клёвый. Как лишпоблядь на этапе интермиссии, уверяю - у лисперов свой мирок контрол-флоу, в котором они угорают по взлому аппликативной редукции макросами, ебашат метадсли типа loop, iterate, series, for/fold, которые раскрываются чуть ли не в ассемблер и упарывают континуации - даже если они не предусмотрены рантаймом.
>> No.12187 Reply
>>12184

Всё до безобразия просто - жабанамашине тупо заполонила весь интырпрайз и теперь без жабомашины никто его и не представляет. Хомячки, хуле.
>> No.12189 Reply
File: y_441e0874.jpg
Jpg, 101.80 KB, 500×750 - Click the image to expand
edit Find source with google Find source with iqdb
y_441e0874.jpg
>>12176
> Значит ли это, что на каком-нибудь лямбда языке вроде Хаскеля можно спокойно лепить свои map-ы и всё распараллелится и будет быстрее Сишки?
Если кратко, то нет. Если длинно, то да, Хаскель требует меньше усилий при решении подобных задач. Правда шансов у него маловато, сишку использует несравнимо больше программистов, поэтому все инструменты будут создаваться в первую очередь под неё. Пусть это неудобно, зато массово. Компаниям надо зашибать бабки, а не страдать перфекционизмом.
> Как они могут сколько-нибудь нормально работать без оптимизации хвостовой рекурсии?
JVM создавалась под Джаву, ФЯ на неё нормально не натянуть. Но скалка и кложа - мультипарадигменные, поэтому всегда можно выкрутится. Причем это выкручивание не сильно отличается от того, что приходится делать на Хаскелле - там тоже приходится задумываться о том, во что сконпелируется твой код. Хотя да, в JVM граблей больше.
>>12180
Иди уже знакомься с ней http://vkontakte.ru/id2405418. Будете вместе рычать в микрофон и постить расчленёнку бга, а её вконтактик доставляет! найдёшь чего ржачного - сливай сюда
>>12184
Ты преувеличиваешь масштабы трагедии. Хвостовая оптимизация нужна для обработки списков, но это решается костылями. Кроме того, на списках не часто возникает взаимная рекурсия, поэтому многие случаи скалка разрулит сама. Для деревьев хвостовая оптимизация в большинстве случаев не нужна, т.к. глубина более-менее сбалансированного дерева находится в логарифмической зависимости от числа узлов. Ну и не стоит забывать о том, что в общем виде хвостовая оптимизация (inplace пересборка кадра стека сама по себе + вытаскивание континуаций в кучу при приведении к хвосторекурсивной форме) - довольно ресурсоёмкая операция, поэтому часто выгоднее схавать немного стека, чем лепить её куда ни попадя.

Алсо, про лишп ты зря, его штандарт тоже ничего не говорит по поводу хвосторой рекурсии.
>> No.12190 Reply
>>12064
Ну какбы они утверждают, что по отношению к общей системе типов .NET Haskell - не пришей к пизде рукав. Тот же самый OCaml тоже несколько коряво прилег на этот базис, но в силу свой мультипарадигменной природы и энергичности позволяет как-то интегрироваться. Хачкель бы получился языком в вакууме.
>> No.12191 Reply
>>12189
Я только не понимаю, при чем тут вообще JVM. Разве не конпелятор скалы должен еще на этапе анализа и оптимизации AST детектировать хвостовую рекурсию и перепаковывать рекурсивную функцию в циклы с такими-то продолжениями?
Еще непонятно, идет ли сейчас речь об автоматическом приведении наивной реализации рекурсивной функции к хвостовому виду или о том, что даже если ты постарался (например как http://habrahabr.ru/blogs/net/57503/) и в явном виде переписал все через континуации, у тебя все равно все может развалиться на ровном месте.

ОЛСО, по мнению автора Скалы, Скала язык умеющий конпелироваться как под JVM так и под .NET, только увы и ах, нас снова тролируют.
>> No.12193 Reply
File: x_8578fb1b.jpg
Jpg, 65.47 KB, 400×598 - Click the image to expand
edit Find source with google Find source with iqdb
x_8578fb1b.jpg
>>12190
> Ну какбы они утверждают, что по отношению к общей системе типов .NET Haskell - не пришей к пизде рукав.
Можешь дать ссылку на это утверждение?
>>12191
Чувак, тут дело такое:
1. Любую функцию можно привести к хвосторекурсивному виду. Для этого "хвост" функции надо завернуть в континуацию и передать как параметр вызываемой функции. Вызываемую функцию надо тоже модифицировать (чтобы она приняла этот параметр и вызвала его в конце). Сомнительная операция, т.к. приводит к засиранию кучи и тормозам. Это преобразование может делать конпелятор, но ни один сам не делает, как раз в виду его сомнительности.
2. Хвостовой вызов (полученный на предыдущем этапе) можно оптимизировать так, чтобы он не хавал стек. Высокоуровневый конпелятор этого сделать не может, в байткоде есть инструкция вроде "call" (не помню точное название), конпелятор F#-а всего лишь добавляет перед ней инструкцию .tail, которая указывает виртуальной машине, что вызов должен быть оптимизирован. Сама оптимизация заключается в пересборке текущего кадра стека в соответствии с тем, каким его ожидает вызываемая функция, и переход в неё с помощью операции jmp. Тоже весьма сомнительная операция (добавляет много лишних действий по перетасовке стека), поэтому по умолчанию не используется. Конпелятор C#, например, хвостовых вызовов не генерирует, хотя, казалось бы, ничего стоит вставлять .tail перед каждым вызовом любой функции не думая.
3. Линейную рекурсию можно автоматически превратить в цикл. Делается это на высоком уровне, вместо рекурсивных вызовов въебашиватся while. Собственно это и делает конпелятор скакалки. Причем немерлятина умеет детектировать и преобразовывать только простую рекурсию (когда функция вызывает сама себя), скакалка более продвинута и умеет разруливать взаимную рекурсию, главное, чтобы она была линейной... хм, или не умеет. Это тебе надо у Рейфага спростить, это он постоянно скакалку ломает, чтобы джавистов пообсирать.

Если ты постарался и переписал всё через континуации то:
1. F# развалится на какой-то из реликтовых версий доднета, где .tail был плейсхолдером и ничего не гарантировал. На новых гарантированно не развалится, но будет адово тормозить.
2. Развалится на скакалке, гарантированно (кроме вырожденного случая линейной рекурсии, ты его сразу увидишь в процессе переписывания, там у тебя вместо континуации аккумулятор будет передаваться или что-то типа того, не помню уже)
3. Может развалиться на хачкеле из-за ленивости, т.к. он будет класть в санки выражения для вычисления аргументов функции, а когда дойдёт до низу долго и мучительно эти санки раскрывать. Вот тебе примерчик: http://stackoverflow.com/questions/412919/how-does-haskell-tail-recursion-work.
>> No.12194 Reply
>>12187
> жабанамашине тупо заполонила весь интырпрайз
лолшто?
>> No.12196 Reply
>>12193
> Можешь дать ссылку на это утверждение?
Я это увидел в книжке либо у Криса Смита, либо у Сошникова. Домой вернусь, постараюсь найти и выложить.
> Любую функцию можно привести к хвосторекурсивному виду
Спорное утверждение. На мой взгляд, неверное.
>> No.12198 Reply
Похоже и правда, не так всё страшно у скалки. Надо будет на неё попробовать что-нибудь. Приложения под Андроид. Она же, я так понимаю, легко работает со всем, что работает на JVM, верно? Так что Андроидные приложения будет писать как минимум не сложней, чем на Джаве, верно?
>> No.12200 Reply
>>12198
для этого должны быть хоть какие-то биндинги из стандартной библиотеки андройда, нэ?
мимокрокодил
>> No.12201 Reply
>>12200
Ну во-первых я вообще смутно представляю, как оно там связывается, так что вполне мог бы предположить, что нет. Во-вторых, они-таки есть: http://robots.thoughtbot.com/post/5836463058/scala-a-better-java-for-android

Вот только в статье про Хеллоу ворлд - одно, а ИРЛ - бывает совсем другое. Поэтому надеюсь, что кто-то пробовал или хотя бы теоретически знает достаточно, чтоб что-то об этом представлять.
>> No.12205 Reply
>>12198
Посмотри конечно. Программировать на ней будет не сложнее, чем на джаве, хотя и особого профита тоже не будет. Скорее всего, будешь писать так же как и на джаве, только с другим синтаксисом. Потом, если понравится, перейдешь на Хаскелл. Все мультипарадигменные языки по сути компромиссы, мол хочется ФЯ, но так как нормальный ФЯ сделать сложно, да и либ нет, да и не переучишься за один день, фигачат сборную солянку с элементами ФЯ.

История из жизни - как-то раз ездил на озеро с отцом одной знакомой, он угорает за стрельбу из пневматических винтовок. Естественно, он взял с собой соответствующий девайс, и когда я увидел его у него в руках, принялся расспрашивать. Уж не помню, что это была за винтовка, но девайс мне показался сложным в обслуживании, дорогим, и еще откуда-то привезенным, т.е. не очень-то доступным. Когда спросил что мол а нафига столько гемора вокруг в общем-то простой идеи - пострелять по бумажке, он мне ответил, что на определенном уровне ты начинаешь стрелять достаточно хорошо и дальнейший твой рост ограничивает только винтовка - её кучность, начальная скорость выстрела и т.д., что довольно неприятно психологически. Стрелял он, кстати, весьма неплохо, я так не умею. Так вот, с языками программирования аналогичная ситуация. Чем искушеннее программист, тем выше требования к инструменту. Через некоторое время тебя уже не будут волновать `сложности обслуживания' вроде отсутствия IDE c визардами и быстрой справкой по F1, тебя будет волновать свободно-вывешенный ствол и всякая другая фигня, понятная только тем, кто в теме. Ради неё ты будешь готов мирится с некоторыми сложностями. А использование примитивных инструментов будет вызывать у тебя дискомфорт, ведь с ними ты будешь чувствовать, что ограничивает тебя инструмент, а не твой профессионализм.
>> No.12208 Reply
File: 6a00d8345160c569e200e54f2c698c8834-800wi.jpg
Jpg, 29.72 KB, 401×399 - Click the image to expand
edit Find source with google Find source with iqdb
6a00d8345160c569e200e54f2c698c8834-800wi.jpg
>>12205
Поучительная притча, бро.
>> No.12216 Reply
>>12033
В этих SoE какая-то странная графическая либа, упоминания на haskell.org о которой нет? Если чисто подобной нет, то какую стоит осваивать? На hackage их больно дофига, глаза разбегаются.
>> No.12217 Reply
>>12216
> о которой нет?
о которой нет.
>> No.12224 Reply
>>12216
Возможно это http://hackage.haskell.org/packages/archive/HGL/3.2.0.2/doc/html/Graphics-SOE.html. Кажется оно немного протухло, если не получится сбилдить, пиши сюды или хаскель-кафе.
>> No.12225 Reply
>>12224
Вдруг имеет смысл браться сразу за серъезную графическую либу, я ж не знаю. С этой проблем не возникло, cabal сбилдил и установил без каких-либо претензий. Буду ковырять.
>> No.12226 Reply
>>12225
> Вдруг имеет смысл браться сразу за серъезную графическую либу, я ж не знаю.
Если ты не собираешься заниматься серьёзной графикой, то браться за серьёзную графическую библиотеку смысла не имеет. Для HSoE лучше использовать то, для чего она была написана. А то ко всем удовольствиям еще добавится работа по портированию кода на серьёзную графическую библиотеку.
>> No.12292 Reply
File: 1300135903374.jpg
Jpg, 174.41 KB, 1280×720 - Click the image to expand
edit Find source with google Find source with iqdb
1300135903374.jpg
Вышла новая версия HSoE. Называется "The Haskell School of Music". http://www.cs.yale.edu/homes/hudak/Papers/HSoM.pdf
>> No.12296 Reply
>>12292
Ооо, годнота! А то я заебался форсить на чанах книжку десятилетней давности, чтобы знакомство с хаски у людей началось с кабалопроблем. Обновлю копипасту:
[code]
Начинай с The Haskell School of Music дальше читай Typeclassopedia (http://www.haskell.org/wikiupload/8/85/TMR-Issue13.pdf), дальше статьи по ссылкам в тайпклассопедии, викикнигу (http://en.wikibooks.org/wiki/Haskell), а точнее отдельные главы. Ну и вики на haskell.org.
Некоторые няшечки могут посоветовать Душкина (беги от этой книги, как от чумы), Грема Хаттона или "Изучи себе хаскель во имя великой справедливости" - не слушай их, только напрасно потратишь время.
Ну а после изучения нормального языка программирования уже сам решишь, нужен ли тебе этот самый пикрилейтед.
[/code]
Тайпклассопедию надо тоже чем-нибудь заменить. Имхо она громозкая для того объема информации, которое в ней изложено. И непонятная. Вогнять говно вроде
[code]First, the f a and f b in the type signature for fmap tell us that f isn’t just
a type; it is a type constructor which takes another type as a parameter. (A
more precise way to say this is that the kind of f must be * -> *.[/code]
человеку, который раньше не работал с ЯП с хайкайндами - это сцуко издевательство.
>> No.12297 Reply
Как на хачкелле реализовывать систему объектов с внутренними состояниями?
>> No.12298 Reply
Скажите пожалуйста, Хаскель действительно умеет только в факториалы или библиотек достаточно, чтоб штапмовать всякие виджеты под GTK? Если второе - насколько сложно в нём пишется простой интерфейс в GTK? Как в Пайтоне? Как в С++? Ещё проще/ещё сложнее? Надо напридумывать практических задач для обучения, а я уровень практичности не очень представляю.
>> No.12300 Reply
>>12297
Канонично - хранить стейт в reader/writer мондах.
>>12298
GTK оно и в Африке GTK. С хаскеллем оно даже удобнее, типизация сильно помогает. Плюс практически исключены сегфолты и тому подобные сипроблемы. Одна проблема - памяти жрет многовато.
>> No.12301 Reply
File: madokagatari.jpg
Jpg, 267.47 KB, 469×640 - Click the image to expand
edit Find source with google Find source with iqdb
madokagatari.jpg
>>12297
Хорошо хоть не рак яичек. Да как хочешь - так и можешь организовать. Можно как телебейсике - потоками, обменивающимися сообщениями. Можно как в мейнстриме - рантаймовым диспатчем с помощью классов типов и rank-2 АТД. Изменяемое состояние - рефы как в любом эмелеговне. Вот только не понятно, зачем тебе хаскель. Им пользуются как раз те, кому "реализовывать систему объектов с внутренними состояниями" совсем не хочется. Раз уж ты преследуешь противоположную цель - разумнее выбрать какой-то другой язык.
>>12298
> Хаскель действительно умеет только в факториалы
Да.
> GTK
Подразумевается, что под GTK что-то кроме факториалов с ГУИ пишут?

Следующий!
>> No.12302 Reply
>>12300
> Одна проблема - памяти жрет многовато.
Это примерно?..
>>12301
Как будто ИРЛ нужно что-то большее. Следующий.
>> No.12303 Reply
>>12292
Добавлю, что для того, чтобы послушать факториалы из нового факториалосборника на убунту-линукс и ghc-7.0.3 (и вообще, по словам штангистов http://ru-lambda.livejournal.com/127375.html, в любой ОС на ghc-7) нужно сделать следующее:

1. Выполнить инструкции по адресу http://haskell.cs.yale.edu/?page_id=269 . Выполнение инструкций должно закончиться на строке [25 of 25] Compiling Euterpea.Audio.Render ( src/Euterpea/Audio/Render.hs, dist/build/Euterpea/Audio/Render.o ) зависанием гхц.
2. После этого надо открыто текстовым редактором файл src/Euterpea/Audio/Render.hs, который лежит в папке с исходным кодом и закомментировать там функции pSwitch и renderSF. Плюс renderSF надо убрать из экспортов модуля.

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

Алтернативно можно попробовать исправить баг http://hackage.haskell.org/trac/ghc/ticket/5022

Алтернативно можно попробовать использовать ghc версий 6.x и все должно собраться, но я не проверял.
>> No.12305 Reply
>>12301
> "реализовывать систему объектов с внутренними состояниями" совсем не хочется
Я несколько туповат, извини, поэтому не могу себе представить, как проектировать большие системы используя лишь кучу самописных монад и функций над ними. Мне подобное конструирование кажется гораздо менее естественной и простой описательной способностью, чем традиционное ооп. Был бы несказанно рад, если бы это оказалось не так, но сначала таки придется осилить теорию категорий, а в ней слишком много жидовских терминов, в определения которых надо верить.
>> No.12306 Reply
File: 1299855183250.jpg
Jpg, 32.90 KB, 1280×720 - Click the image to expand
edit Find source with google Find source with iqdb
1299855183250.jpg
>>12302
> Как будто ИРЛ нужно что-то большее
Да, конечно. ИРЛ нужен, например, нативный лук-энд-фил в ОС, которыми пользуется больше одного процента пользователей. Ты вообще хоть одно реально используемое приложение, написанное под ГТК знаешь?
>>12303
К тому времени, как эта книга будет дописана (через год - полтора) этой проблемы уже не будет.
>>12305
> поэтому не могу себе представить, как проектировать большие системы используя лишь кучу самописных монад и функций над ними
Вот я и говорю: "разумнее выбрать какой-то другой язык".
> слишком много жидовских терминов, в определения которых надо верить
Тем более, что ты уже и выбрала другой - поэтому не вижу повода для обсуждения.
>> No.12307 Reply
>>12306
Как раз-таки именно он нормальным людям и нужен, просто, к сожалению, порядочное число илита-погромистов не видят дальше своих емаксов (которыми как раз нормальные люди в жизни не согласятся пользоваться). И как следствие - за примерами далеко ходить не надо. Да хоть бы мой аудио-плеер, представь себе, не mocp и даже не DeadBeef, а Exaile, написаный не просто на GTK, а - ужас-то какой! - на Python. А я ведь ещё не самый страшный случай - полным-полно людей намного нормальнее меня.
Высказывание про 1% я оставлю без комментариев.
>> No.12308 Reply
>> No.12309 Reply
>>12306
Я сам пользуюсь не одним десятком приложений, написанных на ГТК. Зачем мне твои расплывчатые фразы вроде "реально используемое приложение"?
>> No.12310 Reply
>>12307
> емаксов
Умру за Столлмана! Порву за емаск!!1
>> No.12313 Reply
File: 12762315438362.jpg
Jpg, 25.12 KB, 640×480 - Click the image to expand
edit Find source with google Find source with iqdb
12762315438362.jpg
>>12307
> Exaile, написаный не просто на GTK, а - ужас-то какой! - на Python
Не встревал бы, если бы сам не использовал приложения на питоне.

http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=exaile+freezes
http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=exaile+hangs
http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=gajim+freezes

Прямо как в какой-то пасте было "приложения на питоне всегда будут блокировать UI во время операций ввода-вывода".

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

Вон Торвальдс тоже мечется то туда, то сюда. Наверное скоро на макос пересядет, всё к тому идет.
>> No.12314 Reply
File: 1299859048776.jpg
Jpg, 1035.62 KB, 1200×1200 - Click the image to expand
edit Find source with google Find source with iqdb
1299859048776.jpg
>>12307
> Как раз-таки именно он нормальным людям и нужен
Вот только они об этом не знают. Сообщи им скорее.
> дальше своих емаксов (которыми как раз нормальные люди в жизни не согласятся пользоваться)
Совершенно верно.
> мой аудио-плеер, ... Exaile
Это не аудио-плейер, а игрушка для нердов и фриков. Аудиоплеер - это какой-нибудь ipod, denon dcd-510 или, в крайнем случае wmc или itunes. О существовании всяких эзайлов знают только сумасшедшие погромисты и идейные бородатые слесаря по компьютерам.
> Высказывание про 1% я оставлю без комментариев.
Правильно, потому что возразить-то нечего.
>>12309
> Я сам пользуюсь не одним десятком приложений, написанных на ГТК. Зачем мне твои расплывчатые фразы вроде "реально используемое приложение"?
Что ты подразумеваешь под "пользуюсь"? Поставил на свой линукс-плейстешон и пугаешь ими одноклассниц? Я и сам, будучи вышеуказанным сумасшедшим программистом игрался в некоторые нерд-игрушки под ГТК, и написанные на хаскеле в том числе. Но делают реальную работу, создают прибавочную стоимость люди с помощью совсем других программ. Настоящих орудий труда. Вордов и экселей, фотошопов и тридемаксов, математик и матлабов. Легко видеть, что написанных под ГТК гуи-факториалов в этом списке нет.
>> No.12315 Reply
>>12313
> питоне
ух бля, ну ладно, сделаю вид, что ничего не видел
Подтверждаю, работает скажем прямо, неидеально. Но в принципе - я доволен. Всё остальное под Линуксом меня вообще не устроило. И на самом деле он тоже мог бы не устраивать, но в нём есть просто замечательная особенность - причём, что самое ироничное, это именно тот самый "ужас какой". Благодаря компактности и простоте его сорцов, я могу дописать большую часть того, что разработчики посчитали "ненужной хуетой". И даже ничего перекомпилировать не надо. Это помимо того, что у него просто хорошая система плагинов. А ведь если быть реалистами - такого бы не было, если бы он был написан "как положено", на Qt и передовом языке вроде хачкеля. Конечно, нормальные люди ничего дописывать не будут, но в результате и они имеют довольно простой, удобный, да ещё и бесплатный продукт. И, боюсь, что именно к тому всё и идёт, ибо железо позволяет. Ну это если оставить в стороне разговор о том, что десктопы вымирают и всё такое.
> Вон Торвальдс тоже мечется то туда, то сюда. Наверное скоро на макос пересядет, всё к тому идет.
И я его прекрасно понимаю. В смысле, при современной жестокой действительности это выглядит довольно разумным решением.
>> No.12316 Reply
>>12314
> Правильно, потому что возразить-то нечего.
А что возражать на бред сумасшедшего? Именно поэтому я не буду комментировать и остальное. Ну правда, что спорить с больным? Если ты так уверен, что нормальным людям не нужно то, что им, судя по их действиям, нужно - ок, ладно. Не нервничай только. Иди скорее напиши очередной хелоуворлд на хачкеле, может полегчает.
>> No.12318 Reply
>>12314
Тебе что важнее от ПО - удобство(конечно же субъективное) или количество бабла, заколачиваемого с помощью него совершенно незнакомыми тебе людьми по ту сторону Атлантического океана? Для пэйнт, в коротом я на скришотах персональную информацию иногда затираю куда дороже фотошопа, который лично мне просто бесполезен. И плевать, сколько художников-профессионалов используют его как основной рабочий инструмент. Это уже их дело.
>> No.12319 Reply
File: 1302463040129.jpg
Jpg, 192.59 KB, 600×800 - Click the image to expand
edit Find source with google Find source with iqdb
1302463040129.jpg
>>12316
> А что возражать на бред сумасшедшего?
Что ты так раскипятился-то? Фанат гну-свободы?
> Именно поэтому я не буду комментировать и остальное.
Именно потому, что все мной написанное - очевидные факты, с которыми не поспоришь.
> что им, судя по их действиям, нужно
По каким действиям-то? В чем они выражаются?
>> No.12320 Reply
>>12318
> Для меня пэйнт
>> No.12321 Reply
File: 1301323359466.jpg
Jpg, 192.48 KB, 853×480 - Click the image to expand
edit Find source with google Find source with iqdb
1301323359466.jpg
>>12318
Для вовочки, сидящего в песочнице, его совочек, конечно, дороже стучащего в двух кварталах поезда, дымящей на горизонте электростанции и летящего в небе самолета. Но когда вовочка вырастет, он поймет что без совочка он как-нибудь обошелся бы, а без остального перечисленного превратился бы в кусок мертвого холодного мяса. Точнее в косточки, потому что мясо бы быстро съели. Когда кто-то работает, дело делает - это всех касается, по любую сторону океана. И абсурдно сравнивать по важности то, что ставится на воркстейшен, чтоб дела делать и то, что ставится на плейстейшен - чтоб время убивать.
>> No.12322 Reply
>>12297
Чувак, ты удивишься, но хачкель - это не язык для написания абстрактных фабрик виртуальных паттернов, он, сука, практичен. Поэтому первый вопрос, который ты должен себе задать перед тем, как что-нибудь писать - это "что я хочу получить в итоге?" Потому что если ты ничего не захочешь, ты ничего и не получишь - язык-то ленивый. Иди от предметной области, что за состояния, зачем тебе нужны эти состояния? Может быть это у тебя обработчик потока информации, управляемый этим потоком, гугли stream processing. Может тебе нужен гуй, гугли Fudgets.
>>12298
Хуёво. А где с GTK не хуёво? А главное, зачем тебе это говно? Любишь что повинтажнее? Если через пять лет твоё приложение не будет работать в браузере на планшетнике, это будет полностью бесполезное говно с нулевыми шансами выхода на рынок (даже в качестве бесплатной утилитки). На все существующие программы будут смотреть как на менфеймовое корпоративное говно, а программирование по десктоп будет примерно таким же задротством, как написание игр под ZX-Spectrum сейчас.
>>12303
Радость была недолгой..
>>12305
> как проектировать большие системы используя лишь кучу самописных монад и функций над ними
Охуенно. Лучше расскажи, как ты на ооп эмулируешь модули? Ведь на больших системах %извини когда я слышу это слово, сразу вспоминаю объявление на сайте свингеров "от 18 см", извини, ничего не могу с собой поделать, быдло, дрочащее на большие системы или большие базы данных у меня ассоциируется любителями больших хуёв%% используется в первую очередь модульная декомпозиция (модуль продаж, модуль сервиса, модуль интегации с хуем Деда Мороза..) Так что ты используешь в ООП для эмуляции модулей? Дрочишь на синглетоны, статические фасады, SOA, или обмазываешься DI?
> а в ней слишком много жидовских терминов, в определения которых надо верить.
О, нет чувак, твой сенсей тусит на нульче и на ы-чане в /sci/, сюда он не заходит.
>>12307
> порядочное число илита-погромистов не видят дальше своих емаксов
Это число попадает в тот же 1%. Братюня прав, GTK не нужен. Даже если бы был нужен десктоп, он бы не понадобился ввиду присутствия WPF на большинстве платёжеспособных десктопов, а на фоне последних тенденций он не нужен совсем.
>> No.12323 Reply
анонимные иксперты такие иксперты :3
>> No.12324 Reply
>>12319
> Фанат гну-свободы?
Напротив. Даже удвою переход на макос.
> очевидные факты
Очевидно неверные "факты". Настолько очевидно - что надо быть идиотом или упоротым фанатиком, чтоб это игнорировать. На идиота ты не очень похож, зато упоротым фанатиком являешься бесспорно, так что ж с тобой спорить? Можешь клепать свои идеально написанные хелоуворлды на хачкеле хоть до посинения, но, увы и ах, мир движется совсем в другом направлении.
> По каким действиям-то? В чем они выражаются?
В том, что люди предпочитают платить бешеные бабки за продукцию некоторых компаний, просто потому что их продукты и главный менеджер - няшные.

И прежде чем отправиться спать, оставив тебя со своими факториалами, вброшу пять копеек в ваше обсуждение "реальных программ и добавочной стоимости" (что, конечно, само по себе бредово, т.к. наиболее активно пользуются сейчас всякими фейсбуками, которые, очевидно, полезной работы выполняют исклчительно мало). Добавочную стоимость в твоём списке активно вносят что разве ворды и эксели. В остальном - подавляющее большинство "программ, создающих прибавочную стоимость" это говно на джаве с веб-интерфейсом. О которых нормальные люди даже и не подозревают. А нормальные люди как раз и пользуются факториалами с интерфейсом на ГТК - ну или не ГТК, но на такой же примитивной хуйне. Ну и да, помимо этого есть несколько здоровенных хуёвин, вроде фотошопа, которые уже заняли своё место на рынке, каждый в своей нише, и других таких гигантов особо-то никому и не надо.
Впрочем, что-то многовато получилось для "замечания о бреде сумасшедшего". Будем считать, что ты меня затролел.
>> No.12325 Reply
>>12322
Лол, писать на хачкеле что-то, что должно через пять лет быть востребованным на рынке? Да ты шутишь! Нет, его я рассматриваю только как что-то, чем я могу себя развлечь, попутно клепая то, что нужно лично мне и прямо сегодня. А GTK для этого сильно лучше всякого другого, в чём я убедился, дописывая пару кнопок в Экзайле.
> программирование по десктоп будет примерно таким же задротством
Подозреваю, что десктоп будет задротством. Для игр будут PS и Xbox, для кинца и сопутствующего - чуть умнее коробки к ТВ, а для всего остального будут Айпад с андроидоподелками. Ну где-нибудь там и МС встроится, не суть. ПК снова будет для работы.
>> No.12326 Reply
>>12321
Как бы Вовочка не дёргался, поезд с рельс ему не спустить, электростанцию не взорвать и самолёт не сбить. Да и зачем? Вещи, которые прекрасно функционируют и без него(мама и папа Вовочки налоги платят, и Вовочка спит спокойно) и на которые он никакого воздействия не оказывает - с чего бы им стать властителем его дум?
А совочек, он ни от кого, кроме Вовочки, не зависит. Вовочке с ним осторожно обращаться надо, вдруг сломается. Вовочке его от Петьки из старшей группы защищать надо, вдруг отоберет. Так ты действительно обвиняешь Вовочку в недальновидности?
>> No.12327 Reply
> порядочное число илита-погромистов не видят дальше своих емаксов (которыми как раз нормальные люди в жизни не согласятся пользоваться)
Почему? Для меня самые важные вещи в емаксе это удобный текстовый редактор, удобный тайлинг, простота подкручивания аддонов и их количество. Не видел ни одной IDE которая позволила бы так же быстро и удобно разбивать рабочую область на несколько тайлов, редактировать и запускать в них код на разных ЯП. В тайлинге самое главное - чтобы у отдельных тайлов не было оверхеда по пространству где-то на краях, как в вижул студии, например. Кстати, большинство IDE, которые я видел - невыносимое глючное говно. Самая лучшая - msvs, но она тоже никуда не годится, для шарпопроектов с loc > 500000 она виснет через раз даже просто на загрузке.
> GTK не нужен
Наоборот, монструозные тулкиты не нужны, а только такие как GTK имеют право на жизнь. Да, он в тысячи раз примитивнее и предоставляет в десятки тысяч раз меньше возможностей, но так и надо. Только такой вот примитивный и однозначный тулкит может целиком уместиться в голове формошлёпа и позволить ему спросонья провести икспертизу по запросу и сразу сказать - либо запрошенное сделать нельзя впринципе, либо алгоритм такой-то. Программируя же на, к примеру, winforms+devexpress, бедный формошлёп физически не способен целиком уместить в голове функционал даже какого-нибудь ёбаного ЭкстраТриЛистРепозиториКомбобоксАйтема. Роль формошлёпа с этими инструментами - адаптивная самообучающающаяся экспертная система с полиморфной памятью - он занимается только тем, что выискивает сиюминутно-нужную информацию в хелпах, использует её (часто с огромным количеством шаманизма), и кеширует в голове. Но кеша этого не хватает и на один контрол, а GTK туда влезет целиком.
>> No.12342 Reply
Ненавижу! СРАНЫЙ КАБАЛ, ДОЛБАННЫЕ ПАКЕТЫ!!!! НУ КАКОГО ХРЕНА?!!!! Даже на лиспоговне подобного пиздеца не было, сраный GHC, сраный мир. Ни одной доки, как устонавливать это кривонаписанное гавнище. ЧТО такое lhs вообще?!
>> No.12343 Reply
>>12342
Понизь кровяное давление и опиши проблему более рационально.

lhs - это расширение файлов с исходными текстами т.н. литературного хаскеля.
>> No.12344 Reply
File: SNC00123.jpg
Jpg, 537.25 KB, 1280×960 - Click the image to expand
edit Find source with google Find source with iqdb
SNC00123.jpg
>>12342
Пацики, зацените: http://habrahabr.ru/job/6562/
>>12342
Спокойно, няша, расскажи про свою проблему я под виндой, если у тебя линакс - пиши сразу в кафе
>> No.12345 Reply
под линаксом я есть, так что пускай тоже пишет сюда
>> No.12348 Reply
>>12344
не был бы я быдлом, не осилившим даже задрипанный универ, я бы позавидовал этому золотому рабству. но я пройду мимо, дальше говнокодить за еду на пыхе
>> No.12360 Reply
Что плохого в ручном управлении памятью?
>> No.12361 Reply
>>12360
Зачем вручную делать то, что можно автоматизировать?
>> No.12362 Reply
File: elm3ign0xu7p.jpg
Jpg, 52.21 KB, 640×539 - Click the image to expand
edit Find source with google Find source with iqdb
elm3ign0xu7p.jpg
>>12321
> Точнее в косточки, потому что мясо бы быстро съели.
>> No.12364 Reply
>>12360
Выгода от него может быть только в хорошо продуманной байтоебле.
А для таких задач хачкель впринципе не задумывался.
Только хайлевел.
Для байтоебли кроме сишки есть только недоделки и мичты: bitc, cyclone, ats, habit.
А c++ не может ни в байтоеблю, ни в хайлевел.
>> No.12373 Reply
Haskell-тред будет здесь.

...

...

...

А c++ не может ни в байтоеблю, ни в хайлевел.

It never changes
>> No.12382 Reply
А я люблю брать GHC.Prim и ебать им байты. На 2 террабайта полдня уходит. Зато когда я пишу
ST $ \s1# ->
   case sizeBU n (undefined::e) of {I# len# ->
   case newByteArray# len# s1# of {(# s2#, marr# #) ->
   (# s2#, MBUArr n marr# #) }}
мне кажется что всё программирование состоит из байтоебли, и даже хайлевел и даже хаскель.
>> No.12388 Reply
File: 1312907212827.png
Png, 1.08 KB, 300×20
edit Find source with google Find source with iqdb
1312907212827.png
File: T_T.txt
Txt, 0.00 KB, 0 lines
view edit
T_T.txt

Анон, я бьюсь головой о стену и рыдаю - хаскель не может в libcurl. При запуске в виде скрипта из ghci всё норм, но скомпилированная в натив прога не пишет кукисы на диск. Пишет, сцуко, CurlOk, но кукисы, блеать, не пишет.
Что же делать?
>> No.12389 Reply
File: Nyu.png
Png, 34.97 KB, 125×140 - Click the image to expand
edit Find source with google Find source with iqdb
Nyu.png
>>12388
Погоняй через strace (strace ghci TT.hs и strace TT для сконпелированного фаела). Подозреваю, что у тебя какие-то currentdirпроблемы.
>> No.12391 Reply
File: 1.hs
Hs, 0.00 KB, 0 lines
view edit
1.hs
File: pm.PNG
Png, 18.15 KB, 1024×186
edit Find source with google Find source with iqdb
pm.PNG

>>12389
Мониторил ProcessMonitor'ом
Колонка ProcessName в пикрелэйтед говорит нам, что екзешник даже не пытается писать, а интерпретатор превозмогает ;_;

Добавил строчку
"setopt hCurl $ CurlCookieFile cookiesFileName"
в исходник, чтоб было видно путь
>> No.12400 Reply
>>12391
Я не вкуриваю curl, но мне показалось подозрительным что curl-cookie-file и curl-cookie-jar - один и тот же файл.
>> No.12402 Reply
File: 541641+841635.jpg
Jpg, 256.98 KB, 500×691 - Click the image to expand
edit Find source with google Find source with iqdb
541641+841635.jpg
125226566423311.jpg
Утро доброе. Вопрос такой.
Как формулировать следующее: "выбрать первое удачное x, что x <- [1..10], f x == 3, в противном случае -1"?
>> No.12403 Reply
File: 2009-02-08-142652.jpeg
Jpeg, 476.50 KB, 1100×825 - Click the image to expand
edit Find source with google Find source with iqdb
2009-02-08-142652.jpeg
>>12402
По-разному, я как-то так делаю:
case find ((3 ==) . f) [1..10] of
     Just x  -> x
     Nothing -> -1
или
fromJust $ find ((3 ==) . f) [1..10] `mplus` Just (-1)
или
head $ [x | x <- [1..10], f x == 3] ++ [-1]
>> No.12404 Reply
>>12402
Или
fun f = head $ [x | x <- [1..10], f x == 3] ++ [-1]
Или
fun f = case filter (\x -> f x == 3) [1..10] of
  h:tl -> h
  otherwise -> -1
>> No.12405 Reply
Что значит сформулировать? А только что ты чем занимался? Да знаю, что онанировал, я про >>12402 пост.
>> No.12408 Reply
>>12404
Малаца, 1 то же самое что 3 в >>12403, 2 - то же самое что 1, только хуже.
>> No.12412 Reply
File: 1259879836974.jpg
Jpg, 41.47 KB, 263×317 - Click the image to expand
edit Find source with google Find source with iqdb
1259879836974.jpg
>>12391
> <- return
ну ты понял
>> No.12413 Reply
File: westernisation_Qipao1.jpg
Jpg, 175.66 KB, 511×770 - Click the image to expand
edit Find source with google Find source with iqdb
westernisation_Qipao1.jpg
>>12402
Для решения таких задачек используются типы и hoogle.
> выбрать первое удачное x, что x <- [1..10], f x == 3
Тип нужной нам функции
   (a -> Bool) -> [a] -> Maybe a
hoogle находит: Data.List.find
> в противном случае -1
Тип нужной функции
   Maybe a -> a -> a
hoogle находит: Data.Maybe.fromMaybe

Итого:
   fromMaybe -1 . find ((==3) . f) $ [1..10]
>> No.12416 Reply
>>12408
Что меня больше поразило, так это что 1-е 1-в-1 совпало.
>> No.12444 Reply
File: 2c8cabc2f94cd7e1d25d9a812df939f5.jpg
Jpg, 941.35 KB, 2100×1600 - Click the image to expand
edit Find source with google Find source with iqdb
2c8cabc2f94cd7e1d25d9a812df939f5.jpg
>>12402
[code]
find f = foldr ((.) . choose) id [1..10] (-1)
where choose x y = if f x == 3 then x else y
[/code]
Зачем тебе этот -1? Какие-то байтозамашки..
>> No.12445 Reply
File: 6e9246ec5008eed5eeed802602d4533a.jpg
Jpg, 415.84 KB, 600×743 - Click the image to expand
edit Find source with google Find source with iqdb
6e9246ec5008eed5eeed802602d4533a.jpg
чё-то /pr не работает. ладно, пока сюда вброшу, а то потеряю.

Вышла новая версия славного компилятора, полная слепящего вина: http://haskell.org/ghc/download_ghc_7_2_1
- семейства типов допилены (можно забить болт на фундепы)
- добавлен "безопасный" Хаскель (можно троллить даже тех питушков, которые слышали про функции с префиксом unsafe)
- добавлена возможность написания плугинов (можно не ждать по 5 часов, пока он соберётся, чтобы что-нибудь попробовать). Пока только в Core
- List comprehensions теперь работает для любых мондад (не знаю нафиг нужно, но фиг с ним)
- добавлена поддержка datatype-generic programming (можно долбиться в жопу темплейт-хаскелем для решения задач метапрограммирования, достаточно наследовать Representable0 и GHC автоматически сгенерирует представление вашего типа данных на тайплевеле, а также функции для конвертации в него)
- поддержка многосторонности и :script для GHCi, чтобы фигачить скрипты на Хаскелле.
- и другое

Изучайте Хаскель во имя добра и вас ждет увлекательная высокооплачиваемая работа в ведущих антивирусных компаниях мира!

ню-фагам советую ждать платформу, доброчан же. в слепящем вине половина хакаджа не соберётся. вторая. первая вообще ни в чём не собиралась.
>> No.12446 Reply
>>12413
Так это клюшка и мяч! А я-то испугался, чего они там бильярдными киями тыкают.
>> No.12447 Reply
>>12445
> увлекательная высокооплачиваемая работа в ведущих антивирусных компаниях мира
Так тебя взяли или нет?
>> No.12448 Reply
>>12445
> можно долбиться
можно не долбиться упс!
>>12447
Я же в /pr/ ответил.
>> No.12450 Reply
>>12445
Не знаешь, какие плюшки ожидаются в 7.4.1? Нигде не могу найти, а просматривать все тикеты вручную нехотеть.
>> No.12457 Reply
>>12445
> можно не ждать по 5 часов, пока он соберётся, чтобы что-нибудь попробовать
Хачкель собирается 1-2 часа и то только в первый раз. В последующие разы сборка становится инкрементальной и собирается все минуты за 2-3. Или даже за секунды, не помню.
>> No.12459 Reply
File: konatadark.jpg
Jpg, 431.92 KB, 792×950 - Click the image to expand
edit Find source with google Find source with iqdb
konatadark.jpg
Проясните кто знает нынешнюю ситуацию с динамическими массивами (аля list/c# или vector/c++).
Я хочу каноническую реализацию binary-heap в ресайзящемся массиве и в рамках ST, но не знаю как.
>> No.12471 Reply
>>12459
Булат Зиганшин писал какую-то фигню http://hackage.haskell.org/cgi-bin/hackage-scripts/package/ArrayRef но она уже немного протухла. Он там наворотил какие-то абстрактные котегории абстрактных монад, возможно это связанно с желанием получить кроссплатформенность (GHC/Hugs), мне лень разбираться. Если тебе охота тупо побайтоёбствовать на Хаскелле что не очень приятно, должен заметить, можешь взять БОЖЕСТВЕННЫЙ 7.2.1 СИЯЮЩИЙ В СВОЁМ ВЕЛИКОЛЕПИИ и собирающий еще на 30% меньше программ там как раз выполнили тикет какого-то братюни, которому адово понадобилось копировать эти самые массивы в чаде кутежа: http://hackage.haskell.org/trac/ghc/ticket/4928. Кстати, то, что ему понадобилось копировать массивы, как-бе намекает, можешь с ним связаться и поинтересоваться зачем, возможно он уже пишет какую-нибудь либу для массивоёбства.

А вообще, производительность на копировании особо не нужна, потому что если твой вектор на каждом ресайзе растёт 1.5-2 раза (как в С++/C#) ресайзиться он будет не часто, поэтому можешь тупо брать и копировать поэлементно в ST через высокоуровневый API. Лучше не страдай хернёй, а почитай Криса Окасаки, он описывает, как делать очереди с приоритетами (тебе ведь для этого куча нужна?) и подобное говно на функциональных языках.
>> No.12473 Reply
>>12471
> Окасаки, он описывает, как делать очереди с приоритетами (тебе ведь для этого куча нужна?)
Угу. Там много интересного, но я хочу пока освоиться с классической методологией.
Есть такая реализация: http://hackage.haskell.org/packages/archive/TreeStructures/0.0.2/doc/html/src/Data-Heap-Binary.html#BinaryHeap
но ящитаю, это уже как-бы другая структура данных. У меня сейчас интерес больше теоретический - к тому, как это вообще сделать на хаске.
>> No.12481 Reply
>>12471
Вот зачем:
http://blog.johantibell.com/2011/02/slides-from-my-hashing-based-containers.html
18-я страница презентации.
>> No.12482 Reply
>>12473
> Угу. Там много интересного, но я хочу пока освоиться с классической методологией.
binary-heap, уложенная в массив - это чисто байтоёбская шняга. Делать её на языке, одна из целей которого избавить кодера от байтоёбства - немного странно. Возьми лучше паскалик.
А еще для любых элементов, кроме примитивных типов, ты не получишь никакого профита. Потому что Хаскель не может в unboxed структуры, поэтому тебе придётся хранить в массиве указатели на санки. Их похуй где хранить же, в массиве или в ноде бинарного дерева.
А еще байтоёбство заблокирует векторизацию. Так что теоретически ты можешь даже проиграть по скорости.
А еще это не стандарт.
>> No.12483 Reply
>>12459
Берешь vector и пишешь. Копирование там есть, тормозное но терпимо. Главное не придется самому писать код "копирующий поэлементно", как тебе алкопарашутист советует.
>> No.12484 Reply
>>12482
Не задабривай его неокрепшие мозги своими предрассудками. Хаскель может в байтоебство лучше всяких паскалей. Загляни в ByteString и ужаснись. И в анбоксед структуры (если они в массиве) он прекрасно может.
>> No.12486 Reply
File: Безымянный.jpg
Jpg, 19.28 KB, 413×313 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.jpg
>>12483
Один хуй оно там через basicUnsafeRead basicUnsafeWrite, разве что велосипед не придется изобретать. Но что я вам, все либы с хакаджа должен наизусть знать что ли? Да и вообще сиблядство, фу блядь, фу нахуй!

>>12484
> Загляни в ByteString и ужаснись.
Заглянул, ужаснулся. Что оно анбоксит, кроме Word8? Да тот же Data.Vector.Unboxed лучше. Впрочем, примитивные типы + туплы до ^6 прописаны вручную, о чем я и говорил, когда говорил, что хаскель не может в анбоксинг структур. Полностью аналогичная ситуация в Data.Array.Unboxed (только туплов "вручную" нет, ну и хуй на них).

Вообще, ситуацию может немного поменять Representable0, таки мапает kind * в примитивные типы с суммой и произведением, а уж они анбоксятся. Но там надо реализацию смотреть, скорее всего это будет сериализация/десериализация. А главное, нахуя вы вообще устроили байтосодомию в Хаскелле? Возвращайтесь в свою сишечку, или откуда вы там повылазили! Хаскель - это высокоуровневый язык для нормальных людей, в нём нет структур, только типы. А как их лейаутить должен решать конпелятор. Лучше б статью какую-нибудь почитали, эту например http://research.microsoft.com/en-us/um/people/simonpj/papers/ndp/partial-vect.pdf, да подумали, как всё это лучше организовать, тащемта, чем байтами в жопу долбиться.

алкопарашутист
>> No.12488 Reply
>>12486
> Representable0
Ну вот опять. Ты по Утрехту угорел штоле? Выкачай уже 7.2 и посмотри как там Representable0 и Representable1 называются
Generic и Generic1 соответственно
>> No.12489 Reply
>>12488
> Ты по Утрехту угорел штоле?
Да. Я бы еще добавил в хаски атрибутные грамматики.
> Выкачай уже 7.2 и посмотри как там Representable0 и Representable1 называются
Фу бля. Оригинал был таки пёжже: http://en.wikipedia.org/wiki/Representable_functor. Быдлеет хаски, быдлеет..
>> No.12492 Reply
Есть одна функция для линейной аппроксимации.
interp :: [(a,b)]->a->b
Для ее реализации нужна функция f :: [a]->a->(a,a) которая принимает x-координату и отсортированный список координат и возвращает пару ближайших к заданной точек. Например
f [1, 2, 3] 1.5 = (1,2)
f [1, 2, 3] 4 = (2,3)
f [1, 2, 3] 0 = (1,2)
f [1] 2 = (1,1) -- ну или ошибка
1. Как реализовать такую функцию без явной рекурсии и желательно не проходя по списку несколько раз?
2. На самом деле функция f должна искать ближайшие точки с координатой x в списке пар (x,y):
[(a, b)]->a->((a,b),(a,b))
Есть ли способ получить из f такую функцию, кроме как копипастя ее и дописывая везде где нужно fst?
>> No.12495 Reply
С рекурсией сделал так
http://ideone.com/NmADZ
>> No.12510 Reply
File: 781.jpg
Jpg, 24.35 KB, 480×331 - Click the image to expand
edit Find source with google Find source with iqdb
781.jpg
>> No.12512 Reply
File: 13103014156657.jpg
Jpg, 6.68 KB, 167×200 - Click the image to expand
edit Find source with google Find source with iqdb
13103014156657.jpg
>>12495
Но вообще, так аппроксимация не делается, конечно. Тут всю систему надо менять.
>> No.12513 Reply
>>12486
чо, когда снимали фотку ни одна жопа жаба-девелопера не поцтрадала?
>> No.12515 Reply
>>12486
Это ты на фотке? Неудивительно, что тебя на работу не берут.
>> No.12517 Reply
File: Nyuu_manga_in_vector_by_GroundSpiritMinerva.jpg
Jpg, 10.96 KB, 126×150 - Click the image to expand
edit Find source with google Find source with iqdb
Nyuu_manga_in_vector_by_GroundSpiritMinerva.jpg
http://hpaste.org/50231

Можно ли по исходному тексту догадаться, что делает функция xxxx, зная википедические алгоритмы из теории графов? Понятен ли из текста функции сам алгоритм? Ну и прочие вопросы, предложения, пожелания.
>> No.12523 Reply
>>12510
yoba [1, 2, 3] 4 = (2,3) не работает.
Так не делается, да, поэтому свожу задачу к функции, которая ищет пару чисел, потому что интересно решение этой частности. Например, до zip xs . tail $ xs я бы не додумался.
>> No.12525 Reply
>>12517
> http://hpaste.org/50231
http://hpaste.org/50235 то ли улучшил, то ли ухудшил.
>> No.12530 Reply
>>12517
Прозреваю алгоритм Дийкстры. Но я Хаскеля нихуя не знаю же, узнавал не алгоритм по коду, а хаскель по предполагаемому алгоритму, лол.
А вообще этот ваш Хаскель вызывает у меня какие-то двойственные ощущения. С одной стороны, есть в нём вещи, которые мне ну просто-таки очень нравятся. А с другой - язык, это коммпьюнити, а хаскелефаги чересчур фанатичны. Ну и язык такой же, фанатичный. Типа как айфон - даже если он для чего-то неудобен, всё равно надо пользоваться - айфон же, круто! Ну и, да, уж слишком история компьютер сайенс императивна. Вот даже этот алгоритм Дейкстры - пастарилейтед, это какая-то странная попытка выразить через формулы то, что является последовательностью действий, изначально и по своей сути. Алгоритмы не декларативны, а писать на Хачкеле императивно как-то странно. Так и хочется спросить: "нахуя?"
Это отдалённо напоминает мне мои ощущения при попытке написать что-то на Прологе. Я искренне удивляюсь, что оно работает и не могу себе заранее ответить, насколько реально эффективным будет такое решение для непридуманного набора данных, будет ли оно вообще выполняться за разумное время или нет. С хаскеллем всё не так плохо, но ощущение похоже: то, что написано, выглядит очень круто, но, блядь, написано совсем не то, что произойдёт в действительности. Что-то недоброе он во мне будит.

Надо будет всё-таки выделить на него побольше времени на досуге, пожалуй.
>> No.12531 Reply
File: Screenshot.png
Png, 36.31 KB, 766×237 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot.png
Почитываю этот хваленный HSoE, пишу примерчи, щелкаю задания, но чувство того, что после этой книги я все равно нихуя ничему не научусь остается.

Ладно, я еще не против того, что в течение нескольких глав приходится реализовывать неэффективную функцию того же подсчета площади (да и автор сам предложил переписать на векторные произведения, так как это лучше); не против того, что определение по какую сторону от прямой находится точка введено без единой строки об уравнении прямой; но блять, разложить эллиптический интеграл в ряд и нихуя не объяснить как — это для меня, как для быдлостудента первого курса, просто сраное издевательство.

Если мои нервы не выдержат, то пересяду на The Craft Of Functional Programming Симона Томпона или на Real World Haskell, обложившись конкретной математикой Кнута. Все правильно сделаю?
>> No.12532 Reply
>>12531
Ты математику там что ли изучать по этой книжке взялся? Она там юзается как раз потому что это все понимают, и можно сосредоточиться на сути вместо объяснения предметной области.
>> No.12535 Reply
>>12517
Слишком плотный код с какой-то математической хуйнёй (ни одного алгоритма на графах я уже не помню, но это не отменяет непонятность кода). При этом его плотность ничем не компенсирована. Ни использованием "высокоуровневых" типов (всё сделано на массивах, списках и туплах, прям как в Лиспе), ни комментариями (глубокомысленные идентификаторы improve и correctPath говорят нам о том, что мы что-то улучшаем и делаем правильным, но нихуя не раскрывают сути, а учитывая, что узнать их тип практически нет никакой возможности, даже загрузив это добро в GHCi, становится OHCE печально), ни использованием узнаваемых паттернов. Попробуй Literate Haskell что-ле.
>> No.12537 Reply
>>12532
Если судить по языку автора, то он, впрочем-то, вовсе не подразумевает что все просто и понятно. «Математики все сделали за нас.» Поэтому по полученным результатам книга напоминает какой-нибудь вузовский учебник по химической кинетике, где дохуя эмпирических формул даже без намека на способ их получения.
>> No.12539 Reply
>>12530
> уж слишком история компьютер сайенс императивна
Ага, а еще когда-то программы на перфокартах выдалбливали. Я думаю, лет через 50, когда мы будем квантовать капчу, так же смешно будет вспоминать о императивных и задроченных под фон-неймановские архитектуры алгоритмах.
> странная попытка выразить через формулы то, что является последовательностью действий, изначально и по своей сути
Считать это какой-то атсральной "последовательностью действий" (которой ты не сможешь дать чёткое и строгое определение, если я тебя попрошу) вредно, ведь оно поддаётся чёткой формализации, которая позволяет человеку чётче формулировать операции, а компьютеру компилировать более качественный код.
>> No.12540 Reply
>>12539
> квантовать капчу
К сожалению быстро изобретается только всякое говно. А вот ни искусственного интеллекта, ни яблонь на Марсе, ни лекарства от старости мы так и не получили, хотя уже лет 50 казалось, что до всего этого рукой подать.
>> No.12541 Reply
>>12537
Книга не о математике. Книга - об использовании такого-то подхода к построению программ на основе АТД и матчинга, ну и небольшой (и хреновый, по-моему) учебник хаскеля. Пробелы с математикой или теорией музыки с особенностями работы протокола midi можешь восполнять в другом месте.
> где дохуя эмпирических формул даже без намека на способ их получения
В конце книги обычно есть толстый список ссылок, изучай, если хочешь, хотя тебе жизни не хватит все изучать, так что привыкай использовать формулы, которые не понимаешь - абстрактное мышление подразумевает в том числе и способность относиться к таким формулам как к черному ящику. Но HSoE это не касается
>> No.12542 Reply
>>12530
Доброчую. Ты очень точно выразил и моё ощущение от Хаскеля и ФП вообще.
Причём я-то Хаскель сколько-то знаю, писал даже как-то на нём GTK-шную утилитку на пару тысяч строк.
Но ощущение не проходит.
>> No.12549 Reply
File: CAR_Hoare.jpg
Jpg, 31.07 KB, 420×384
edit Find source with google Find source with iqdb
CAR_Hoare.jpg
File: image.axd.jpeg
Jpeg, 182.48 KB, 685×1024
edit Find source with google Find source with iqdb
image.axd.jpeg

>>12530
> Дейкстра
Потому что это алгол-петушок. Вот почитай тех же Милнера и Хоара, у них все чистенько и декларативненько.
>> No.12550 Reply
File: 123075726559.jpg
Jpg, 51.47 KB, 567×400 - Click the image to expand
edit Find source with google Find source with iqdb
123075726559.jpg
>>12549
JEWS!!!
>> No.12551 Reply
>>12541
Хорошо, ты меня убедил.
>> No.12552 Reply
File: ford-bellman.png
Png, 11.87 KB, 312×180
edit Find source with google Find source with iqdb
ford-bellman.png
File: clemborderline-d3...
Jpg, 114.31 KB, 900×806
edit Find source with google Find source with iqdb
clemborderline-d3km08s.jpg

>>12535 и >>12530
Благодарю, благодарю. Это я http://habrahabr.ru/blogs/python/125003/ прочитал и решил провести эксперимент.

Это не совсем дейкстра, а модифицированный Форд-Беллман. Комментарии и literate programming в нем не использовались, чтобы не портить эксперимент.
> странная попытка выразить через формулы то, что является последовательностью действий, изначально и по своей сути
> по своей сути
Откуда ж ты знаешь, как оно "по своей сути"? Все же научные теории, они только описывают некие явления, не претендуя на суть. С сутью - это к попам надо.

Ну и кроме того смена "базиса" с императивного на декларативный сама по себе дает некие плоды. Я, например, имплементируя алгоритм, догадался до более легкой формулировки

"перебирая все ребра, выполняем оптимизацию пути (см. псевдокод, if d[v] > d[u] + w(u,v) then d[v] <- d[u] + w(u,v)) на прилегаюших к ребру вершинах. Итерируем до тех пор, пока не становится нечего оптимизировать, то есть if не выполнится ни одного раза".

Легкая она на мой взгляд потому, что отсутствует явно заданное количество итераций.
> Надо будет всё-таки выделить на него побольше времени на досуге, пожалуй.
Удели, хаскель хороший.
> учитывая, что узнать их тип практически нет никакой возможности
Вообще в ghci есть дебаггер, который тебе все покажет. Ради моего кода ты в него конечно не полезешь, но ради кода, в котором надо разобраться полезешь.
>> No.12554 Reply
File: demotivatory_32.jpg
Jpg, 52.09 KB, 700×585 - Click the image to expand
edit Find source with google Find source with iqdb
demotivatory_32.jpg
>>12552
> Комментарии и literate programming в нем не использовались, чтобы не портить эксперимент.
Няш, чтобы не портить эксперимент, тебе бы следовало писать код на анлямбде. Потому что любой идентификатор - это уже комментарий.
>> No.12555 Reply
>>12554
Ахахах, откуда фотка?
>> No.12557 Reply
>>12554
Мой эксперимет, чё хочу то и делаю!
>> No.12579 Reply
File: hentai--haskell-tan.jpg
Jpg, 63.38 KB, 451×451 - Click the image to expand
edit Find source with google Find source with iqdb
hentai--haskell-tan.jpg
>> No.12601 Reply
>>12552
> Откуда ж ты знаешь, как оно "по своей сути"?
Ой, ну вот не нужно тебе опускаться до такой хуйни. Ты ж адекват, тут таких и без того мало.
Теперь собственно, отвечаю (хотя ответ, в общем, необязателен, ввиду его очевидности): суть алгоритма Дейкстры, Беллмана-Форда и вообще, - если исходить из энциклопедического определения этого слова, - любого алгоритма, это чётко определённый конечный набор последовательных инструкций, приводящих к определённому результату. Это определение - особенно слово "последовательных" в нём - недвусмысленно говорит нам об императивности алгоритма. Любого.

Впрочем, развивая тему, проблема вовсе не в том. Потому что в "дуэли на определениях" легко скатиться в словоёбство, а, как известно, как розу ни назови - она всё равно пахнет розой. Проблема в том, что математики последнюю сотню лет (сотня - это условно, потому как можно говорить о времени, когда стали активно использовать ЭВМ, а можно вспомнить Эвклида, с его императивными придумками) не хуйнёй страдали, и наштамповали кучу нужных, но очень императивных вещей. Даже больше того, часть математики всегда была очень императивной, потому что на выполнение каждого действия в компактной записи с сигмами и факториалами уйдёт некоторое время. И порядочную часть математики как раз и составляло (составляет) придумывание способов превратить длинную наивную последовательность действий в хитрую, но короткую. Если бы этого не было - всех этих алгоритмов не было бы. Ведь декларативное описание не требует способа найти результат. Достаточно сказать "кратчайшее расстояние от А до Б", чтоб однозначно определить, что мы имеем ввиду. А как его нашли - вопрос третий, хоть все расстояния перебрали, не важно. И так - с любым алгоритмом. Не говоря уже о куче побоных эффектов вроде "сложности функции".
BTW, ты от этого тоже не спасся: "Итерируем до тех пор, пока не становится нечего оптимизировать, то есть if не выполнится ни одного раза". Императивней некуда. Декларативно мы бы просто определили "кратчайший путь" через "наименьшее из того-то и того-то" и так далее, низведя нашу сложную конструкцию до примитивов, которые мы можем считать известными в силу возможностей языка.
Но самое плохое, на мой взгляд, не в этом. Потому как если мы имеем способ получить ответ на наш декларативный вопрос - отлично, другого и не надо. Хуже то, что компьютер-то всё равно императивен, и существует в императивном мире. В конечном итоге то, что ты ему прикажешь как угодно, станет последовательностью действий, каждое из которых требует ненулевого времени на выполнение. И получается, что либо мы должны обучить компилятор выбирать эффективнейший известный алгоритм (и всё равно обязаны помнить о том, какой именно алгоритм он выберет, хотя нам это уже не очевидно из кода!) для любой декларативной формулировки (или хотя бы очень большого их числа), либо нам приходится то и дело прибегать к императивному стилю изложения, что лично меня несколько смущает. Ведь даже довольно декларативная по своему описанию сортировка Хоара, оказывается, может быть в Хаскеле написана эффективно и неэффективно, что нам и продемонстрировали выше.
Хотя >>12549 , по правде, заставил меня призадуматься.
> Удели, хаскель хороший.
Уделю, уделю. Может отпустит маленько.
>> No.12604 Reply
>>12601
> Ой, ну вот не нужно тебе опускаться до такой хуйни
Ну хорошо, не будем пускаться в философские глубины, хотя я держусь позиции, согласно которой мир сам по себе трансцендентен, а его императивность заключается в том, что именно таким манером его начал описывать человек, стало быть налицо не императивность по сути, а императивность как проблема обратной совместимости, стереотипов мышления и ideas reuse.
> Проблема в том, что математики последнюю сотню лет (сотня - это условно, потому как можно говорить о времени, когда стали активно использовать ЭВМ, а можно вспомнить Эвклида, с его императивными придумками) не хуйнёй страдали, и наштамповали кучу нужных, но очень императивных вещей
Хорошо это или плохо зависит от того, чего тебе нужно добиться. Потому что это только с точки зрения прикладников проблема, а с точки зрения фундаментальной науки - наоборот - повод переосмыслить общепринятые взгляды, и на этой почве родить что-то новое. Не было бы этой идеи переосмысления, не было бы диссера оказаки, например. Не было бы диссера оказаки, не было бы
> Until this research, it was widely believed that amortization was incompatible with persistence [DST94, Ram92]. However, we show that memoization, in the form of lazy evaluation, is the key to reconciling the two
То есть состоялось какое-никакое, а открытие. Конкретнее зачем это нужно сказать не могу, потому что диссер не дочитал.
> ты от этого тоже не спасся
Конечно не спасся, мне пока очень трудно в хачкель и декларатившину (критическая масса ещё не начитана), поэтому и формулировки тоже остаются императивные.
>> No.12608 Reply
File: [FuktLogik][Sayon...
Jpg, 42.92 KB, 848×480
edit Find source with google Find source with iqdb
[FuktLogik][Sayonara_Zetsubou_Sensei][02][DVDRip][x264_AC3].mkv_snapshot_03.35_[2010.03.21_12.07.16].jpg
File: [FuktLogik][Sayon...
Jpg, 52.35 KB, 848×480
edit Find source with google Find source with iqdb
[FuktLogik][Sayonara_Zetsubou_Sensei][02][DVDRip][x264_AC3].mkv_snapshot_03.40_[2010.03.21_12.07.26].jpg

>>12601
> суть алгоритма
> математики наштамповали кучу очень императивных вещей
> часть математики всегда была очень императивной, потому что на выполнение каждого действия в компактной записи с сигмами и факториалами уйдёт некоторое время.
> декларативное описание не требует способа найти результат
> существует в императивном мире
>> No.12609 Reply
>>12601
> декларативное описание не требует способа найти результат.
Может требовать, может не требовать. Сравни, например, два декларативных определения всеми любимого факториала:
Если n = 0, то n! = 1; иначе n! = n * (n - 1)!
n! - количество перестановок множества, состоящего из n элементов
С императивной же формулировкой, сам понимаешь, так не получится.
>> No.12614 Reply
>>12604
Императивность человека спорная штука. Мне это кажется спором, аналогичным интроверсии-экстраверсии, т.е. ориентации на объект и от объекта.
Мозг не императивен. Вся информация о прожитой жизни доступна одновременно, для памяти времени нет, а живем мы скорее реактивно. Обучить бейсику намного сложнее, чем экселю, а любой рецепт от человека для человека это скорее такой здоровенный паттерн-матчинг. Мозгу среднего человека сложно осознавать изменение состояния, поэтому программистов мало.
Сложные системы также проще разрабатывать на основе труб с потоками данных и режимами - они проще влезают в голову. Что проще понять, картинку DSP-обработки или диаграмму состояний конечного автомата?
Получается, что внешний мир императивен, внутренний нет, хотя конечно это модели в одной и той же голове. Пока не нужно моделировать тот самый внешний мир, все хорошо. Иначе все плохо и это не вопрос стереотипов мышления, потому что человек стремится в рассуждениях выкинуть императивность всегда, но не всегда получается. Нет, это не стереотип. Зачастую намного дешевле построить императивную модель чем думать о том, как из нее выкинуть состояние, чтобы впоследствии было удобно думать.
Но это все философия. А на практике пишут и рассуждают на хаскеле вполне императивно, при случае копируя мир, а такие-то комбинаторы служат только для того, чтобы убрать бойлерплейт. Алгоритмы... да какая разница, если они чистые, алгоритмов не так уж и много, больше работы по соединению типизированных труб между алгоритмами, и эту работу нужно облегчать.
>> No.12615 Reply
>>12601
> Достаточно сказать "кратчайшее расстояние от А до Б", чтоб однозначно определить, что мы имеем ввиду. А как его нашли - вопрос третий, хоть все расстояния перебрали, не важно.
>>12609
хуйню написали. всё равно следующий шаг будет алгоритмическим определением.
о чём собственно хоар и говорит: http://research.microsoft.com/en-us/news/features/hoare-080411.aspx
>> No.12616 Reply
>>12554
забыл добавить - это фап. если бы мне платили за матан в два раза меньше чем за погромирование, то я бы только им бы и занимался.
>> No.12617 Reply
>>12609
> Если n = 0, то n! = 1; иначе n! = n * (n - 1)!
Собственно, я это учёл в своей пасте. Там где говорил, про декларативную формулировку "кратчайшего пути". Но это всё равно не способ найти результат, мы просто объявляем, что для некой идейной абстракции - факториала - действительна такая закономерность. А так так такая закономерность действует только для одной идейной абстракции, то это и есть его определение. С этим определением очень удобно работать на уровнях выше, чем находится сам факториал, ну, т.е., нам не обязательно выполнять кучу действий, чтоб доказать, что n! * (n+1)! = n!^2 * (n+1)!. Но когда нам скажут, "всё, довольно пиздеть, скажи теперь чему равно 24!", нам придётся разложить это в 24 числа и перемножить (возможно, применив к этому предварительно ещё какие-нибудь преобразования, которые облегчат работу), на что уйдёт некоторое время. И тут как раз мы утыкаемся в то, что перемножать/складывать/[делать что-нибудь ещё] можно по-разному, с разным числом действий. И каждое действие, которое мы выполним, потребует ненулевого времени. И, наконец, нам нужно будет выполнять эти действия, т.е., мы опять получаем императивный набор инструкций. И, с практической точки зрения, это не страшно, если тот, кто будет выполнять инструкции, догадается выбрать лучший алгоритм для нахождения результата. Вот только это весьма сомнительно. Другой человек может догадаться, что к-тое число фибоначчи можно найти за почти логарифмическое число шагов, а то и вовсе "по формуле". Компилятор - нет, если ему не об этом не рассказали и он не разумен. Получается, как я уже сказал, что нам либо нужно рассказать компилятору о всех возможных алгоритмах и способах их применения, либо постоянно спускаться к императивному изложению. Первое не рассматриваем. Второе предполагает два варианта - либо писать императивно почти всегда (тогда непонятно, нахуй нам вообще сдался Хаскель и максимально разумным выглядит изобретение какого-нибудь компилируемого пейтона), либо прибегать к нему только при необходимости, когда эффективность критична. Получается, что нужно знать, что стоит за нашими декларативными формулировками, а это не очень-то хорошо. Опять же, с теоретической точки зрения. С практической - в этом нет ничего страшного, если компилятор умеет решать большую часть трудностей, рождая эффективный код для "обычных" декларативных формулировок. Но это предположение опроверг пример с сортировкой Хоара ИТТ.
>>12604
Но программировние, как ни крути, не является фундаментальной наукой. Оно нужно, чтоб делать дела. Замечательно, если эти дела можно свалить на фундаментальную науку (математику), и пользоваться ею. Но, как мне кажется - и я подкрепил это какими-никакими аргументами в предыдущем посте - хачкель пока что не даёт такой возможности, и, что куда хуже, вряд ли сможет её дать в хоть сколько-то обозримом будущем, даже при очень оптимистичных взглядах.
Возможно, я стану относиться к этому легче, когда поближе познакомлюсь с хачкелем. Пока что попридержу язык пока что.

Алсо, да, раз уж поговорили о факториалах, накидайте пожалуйста чисел фибоначчи на хаскелле. А то те, что я видел - фиговые какие-то, хуже чем на пайтоне. Надеюсь, я просто не встречал решений тех, кто умеет пользоваться возможностями хаскелля.
>> No.12618 Reply
>>12609
Первый вариант не декларативный. Это типично фп-шная подмена императивности рекурсией.
>> No.12619 Reply
>>12618
> Первый вариант не декларативный.
Докажи.
>> No.12625 Reply
>>12617
> чисел фибоначчи на хаскелле
Навскидку:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
А вообще:
http://www.haskell.org/haskellwiki/The_Fibonacci_sequence
>> No.12626 Reply
>>12617
> тогда непонятно, нахуй нам вообще сдался Хаскель и максимально разумным выглядит изобретение какого-нибудь компилируемого пейтона
То, что ты описал выше - это какая-то Mathematica, с таким-то ебическим матчингом и функциями типа реши_диффур. Тот же факториал можно определить а-ля length(perms(n)), хотя конкретно этот код не Mathematica.
А то, что выглядело максимально разумным, хаскелем и получилось. Хаскель и есть, гхм, компилируемый питон, пиши весь код в IO и дел не знай, а если совсем совести нет, то выводи что хочешь когда хочешь через Debug.Trace. Только можно так не делать, а еще есть плюшки типа стрелок. Но не какая-то там гипер-философская концепция компилятора, который за тебя пишет код (и аналогичные концепции типа автоматического распараллеливания) - нету этого и не будет.
>> No.12627 Reply
>>12619
Он упадет на n = -1. Ты когда-нибудь видел падающее определение?
>> No.12628 Reply
>>12627
По-твоему получается, что 1/x "падает", когда x = 0, а тангенс x "падает" если x = pi/2? А значит арифметика и тригонометрия "императивны". Вообще, то что ты считаешь "императивностью" все остальные называют частичностью, а то, что ты считаешь "декларативностью" - тотальностью.
>> No.12629 Reply
>>12628
Что такое 1/x? Говорят, что y=1/x тогда, когда x*y=1. Не падает. Аналогично с тангенсом, если не описывать его через то, как его можно получить, а описывать его свойства.
>> No.12633 Reply
>>12627
Нет, он не упадет. Ты не сможешь его вычислить. Так же как и не сможешь подобрать такое y, что при x = 0 x*y = 1.
>> No.12636 Reply
>>12625
fibs = fix $ (0:).(1:).(zipWith (+) <*> tail)
>> No.12637 Reply
>>12625>>12636
осильте scan, петушки
>> No.12638 Reply
>>12637
Угу, один ты его осилил.
>> No.12640 Reply
[FuktLogik][Sayonara_Zetsubou_Sensei][03][DVDRip][x264_AC3].mkv_snapshot_23.31_[2010.03.21_12.00.39].jpg
>>12637
pointfree фибоначчи на scanl уже есть в вики по ссылке выше. Да и пишется тривиально, а я продемонстрировал остроумное применение ap.
>> No.12648 Reply
>>12615
> хуйню написали. всё равно следующий шаг будет алгоритмическим определением.
> о чём собственно хоар и говорит: http://research.microsoft.com/en-us/news/features/hoare-080411.aspx
Вот ты-то как раз хуйню несешь.
> Mind you, doing the theory is a bit like writing programs. You have to find the linguistic construction that expresses your ideas.
А уж идеи выражать декларативно можно. А можно как петушок начать учить железку складывать 2 и 2.

Или, например, нужно отобразить множество в другое:
либо пидорасишь бойлерплейт: foreach(x[i] in hui) pizda[i] = x[i]
либо использует такой-то DSL: hui -> pizda
> In the same way that a hardware designer uses Boolean algebra, I would like to see programmers just routinely thinking in terms of programming algebra.
О чем и говорил.
>> No.12650 Reply
>>12648
> либо использует такой-то DSL: hui -> pizda
Ух как декларативно, написать функцию, внутри которой foreach(x[i] in hui) pizda[i] = x[i] с таким-то инфиксным использованием.
>> No.12653 Reply
>>12650
Вообще-то в этом месте он всё верно сказал. Что значит "внутри"? Ты ещё скажи, что внутри слова человек находится функция "выебать бабу мужиком, выкормить, вырастить и т.п." Другое дело что на таких примитивных примерах вся эта "декларативность" - не более чем синтаксический сахар. А на примерах посложнее получается хуйня, судя по всему. Впрочем, последнее - пока что лишь моё подозрение.
>> No.12654 Reply
> внутри которой foreach(x[i] in hui) pizda[i] = x[i] с таким-то инфиксным использованием.
Угу котрая разворачивается в цикл. который в свою очередь разворачивается в машинный бинарный спагетти-код с гото инструкциями, который в свою очередь превращается последовательность электрических импульсов, природа которых обусловлена электромагнитным полем...

Ты демагогию то не разводи, я пишу hui -> pizda и при написании кода думаю в терминах DSL и мне плевать во что это развернётся при компиляции. Точно так же как когда я играю в круйзис, я не задумываюсь о том как дсп ядра моей печи 590 молотят шейдерные команды, просчитывая сфиксели и полигоны. А твоё утверждение о императивной природе программ - это наглая и невежественная ложь невежественного малолетнего кодеришки, которому в прошлом учебном году в школе рассказали про алгоритмы древнегреческих математиков. Фишка вся в том, что когда изобретут квантовые или там нейронные компьютеры, то моя программа, написанная декларативно, работать будет, а твоя императивная отправится на свалку истории вслед за фоннеймановской архитектурой, цифровыми процессорами, плюсами, жабой и прочим байтоговном.
>> No.12655 Reply
> Точно так же как когда я играю в круйзис, я не задумываюсь о том как дсп ядра моей печи 590 молотят шейдерные команды, просчитывая сфиксели и полигоны.
А я когда на пробежке бегаю наоборот, люблю нарушить абстракцию и почувствовать свое туловище. Начинаешь ощущать себя машиной, механизмом из рычагов, мускулов, труб с кровью и сигнальной системой. И тогда можно уже бежать долго, хотя само понятие бега становится не применимо к процессу. Потому что ты не бежишь, а регулируешь машину, настраиваешь ее. И когда она настроена, когда нигде ничего зря не стучит, не перетянуто и гудит спокойно и ровно, вот тогда становится хорошо.
>> No.12656 Reply
>>12655

Не понимаю, что ты хочешь сказать. Машина, которую нужно чинить и настраивать вместо того, чтобы просто ехать и водить - плохая машина, негодная машина. Её нужно выкинуть или продать и купить нормальную, на которой можно ездить не подкручивая каждый вечер в гараже угол опережения и не перебирая мотор.
>> No.12658 Reply
[FuktLogik][Sayonara_Zetsubou_Sensei][03][DVDRip][x264_AC3].mkv_snapshot_06.26_[2010.03.21_11.30.04].jpg
Г-не объебосы, я уже второй вечер пытаюсь читать эту вашу многострочную наркотическую кашу и недоумеваю - вы троллируете друг-друга или на полном серьезе все это пишете?
>> No.12659 Reply
>>12656
> Машина, которую нужно чинить и настраивать вместо того, чтобы просто ехать и водить
Не вместо, а следовательно! Я настраиваю машину, и благодаря этому еду. Только обыкновенно этим спинной мозг занят или что там у нас такое автоматическое, а тут я включаю ручной режим. Конечно можно продолжать упираться, мол, зачем ручной режим, настало время аллоцировать и освободить память... Но это в теории. А на практике, когда я сознательно настраиваю машину, я чувствую все ее неточности работы: где ощущаются микроболи, где механика не совсем оптимальна и т.п. Я как бы одновременно и еду и нахожусь на станции технической диагностики.
>> No.12660 Reply
>>12653
> Другое дело что на таких примитивных примерах вся эта "декларативность" - не более чем синтаксический сахар.
Вот я об этом как раз.
> А на примерах посложнее получается хуйня, судя по всему.
VHDL посмотри.
>> No.12661 Reply
File: Untitled.png
Png, 6.22 KB, 459×57 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
Чем computation отличается от calculation. Яндекс словарь говорит, что и то и другое вычисление, но тут есть какая-то тонкая разница, которая мне непонятна.
>> No.12662 Reply
>>12659
> Я настраиваю машину, и благодаря этому еду.
Нет, ты едешь на плохой неисправной машине, которая пожирает твоё время и деньги на бензин, попёрдывая пробитым глушителем и выпуская клубы сизого дыма.
> А на практике, когда я сознательно настраиваю машину, я чувствую все ее неточности работы: где ощущаются микроболи, где механика не совсем оптимальна и т.п.
Нет, на практике ты тратишь своё время и деньги на то чтобы твой драндулет хоть как то ехал. И когда твою тарантайку обгоняют иномарки, водители которых заглядывали под капот в лучшем случае для того чтобы залить жидкость в бачок омывателя или там уровень масла проверить, у тебя случается баттхёрт, который ты пытаешься вылечить, рассказывая своим друзьям тазоводам про то как ты расточил цилиндры дряхлого пихла и оно стало выдавать аж на целых 5 лошадей больше. А если ещё и клапана новые поставлю - УУУУУ НИ МАШИНА А ПТИЦА БУДЕТ!!!!11111
>> No.12663 Reply
>>12662
> Нет, ты едешь на плохой неисправной машине, которая пожирает твоё время и деньги на бензин, попёрдывая пробитым глушителем и выпуская клубы сизого дыма.
На этом и окончим препирательство, т.к. оно бессмысленно. Другой-то у меня нет.
>> No.12664 Reply
>>12663


Вот тут так сказать и ключевой момент - а знаешь почему у тебя нет её? Да потому что ты потратил все деньги на бензин, на новые поршни, на капремонт чадящего пихла и.т.д. И поверь мне, этих денег тебе бы хватило на новую машину, которая не ломается. Но ты упорно продолжал чинить старое пихло, веря что в этом и есть смысл обладания автомобилем.
>> No.12666 Reply
>>12654
> Ты демагогию то не разводи, я пишу hui -> pizda и при написании кода думаю в терминах DSL
Это называется абстракцией. Но написал ты конкретную команду, которая и останется командой. О декларативности на таком уровне рассуждать нельзя, нету ее тут.
>> No.12667 Reply
>>12664

Раскрывая аналогию - время, которое ты потратил на отлаживание сегфолтящегося байтокода, сконвертированное в деньги которые ты бы мог потратить на новый сервер и писать для него программу на хаскелле, стоит очень дорого. Не нужно разбрасываться им.
>> No.12668 Reply
File: alex_grey.jpg
Jpg, 192.44 KB, 504×378 - Click the image to expand
edit Find source with google Find source with iqdb
alex_grey.jpg
>>12659
Ты открыл осознанность, теперь остается не думать о том, что ты машина, а просто бежать, ну и все остальное делать так. И будешь как пикрелейтед
>> No.12669 Reply
>>12667 Но я же про свое туловище писал, а не про программу на сервере.
>> No.12670 Reply
>>12669
Тело - продажная девка фон Неймана
>> No.12671 Reply
>>12669

А неважно. Для туловища тебе достаточно потратится чуть больше не качественную еду, чем потом бегать по докторам и отстёгивать им бабки.
>> No.12672 Reply
>>12671
> на качественную
быстрофикс.
>> No.12673 Reply
>>12671
Если ты будешь рассматривать туловище как что-то, что требует более качественной еды как бензина, то по докторам бегать придется весьма быстро.
>> No.12674 Reply
File: wonder.jpg
Jpg, 88.35 KB, 338×489 - Click the image to expand
edit Find source with google Find source with iqdb
wonder.jpg
>>12670
>>12671
Ай, демагоги, лишь бы выспорить. Алекс Грей хороший, надеюсь просмотр сайта меня утешит.
>> No.12675 Reply
>>12655
Тебе понравится этот трек
http://www.youtube.com/watch?v=izpzszOKc4c
Ну и этот http://www.youtube.com/watch?v=uOMHOL2ycQk
И этот http://www.youtube.com/watch?v=mYV_NDe2O4I
Не алекс грей конечно, но тоже концептуально.
>> No.12676 Reply
>> No.12677 Reply
ПРИШЛО ВРЕМЯ ПИСАТЬ ОВЕРХЕД
    ПРОГРАММА САМА НЕ ЗАТОРМОЗИТ
    НАПИШИ ЕЁ МЕДЛЕННОЙ, НАПИШИ ЕЁ МЕДЛЕННОЙ ЕЁ ЕЩЕ РАЗ
    ЗАЧЕМ МНЕ НУЖЕН ПЛЮСПЛЮС, У МЕНЯ НЕТ ВРЕМЕНИ ЧТОБЫ ЕБАТЬСЯ С НИМ
    ЛУЧШЕ ЕЩЕ РАЗ НАПИСАТЬ ТОРМОЗНУТЫЙ ОВЕРХЕД
    Я ПИШУ ТОРМОЗНОЙ ГОВНОСОФТ ПО 3 РАЗА В ДЕНЬ
    КАЖДОАЯ ОПЕРАЦИЯ ЗАНИМАЕТ ДВАДЦАТЬ МИНУТ
    Я ЖИВУ АКТИВНОЙ И ПОЛНОЦЕННОЙ ЖИЗНЬЮ
    Я УСПЕШЕН И ПОЭТОМУ ЦЕЛЫЙ ПИШУ ТОРМОЗНОЙ ГОВНОСОФТ
    А ПОСЛЕ ЭТОГО ДРОЧУ НА ЕГО МЕДЛИТЕЛЬНОСТЬ
    ТУПЫЕ ПЛЮСОЁБЫ ОДЕРЖИМЫ ПРОИЗВОДИТЕЛЬНОСТЬЮ
    А Я СВОБОДНЫЙ ОТ ЗАДРОТСТВА ЧЕЛОВЕК
     fac :: Integer -> Integer
     fac 0 = 1
     fac n | n > 0 = n * fac (n - 1)
    ЛУЧШЕ Я НАПИШУ ТОРМОЗНОЙ ГОВНОКОД ЕЩЁ РАЗ
    И РОБОТ ТОММИ ОПЯТЬ ВМАЖЕТСЯ В СТЕНУ,
    ПРОИЗВОДИТЕЛЬНОСТЬ НЕ НУЖНА
    Я НЕ ПИСАЛ ОВЕРХЕД НЕДЕЛЮ
    ПОЙДУ НАПИШУ
    В ХАСКЕЛЛЕ ВСЕ ПРОСТО И ПОНЯТНО
    OUT OF MEMORY. ЭТО ЖЕ ОЧЕВИДНО КАК ЕЕ РЕШИТЬ
    ПРИШЛО ВРЕМЯ ПИСАТЬ ОВЕРХЕД
    КОКОКОКОКОКОКО
    МОНАДЫ ФУНКТОРЫ ТАЙПКЛАССЫ ХВОСТОВАЯ РЕКУРСИЯ
    КОКОКОКОКОКОКО
>> No.12679 Reply
>>12676
Но там ничего не говорится про бегающих биороботов.
>> No.12681 Reply
>>12677
> РОБОТ ТОММИ ОПЯТЬ ВМАЖЕТСЯ В СТЕНУ
One Linux- and Java-powered entry, Tommy, failed to qualify after a chip failure caused the car to run into a wall at 70mph in a qualifying run.

Мимонапомнил
>> No.12690 Reply
>>12681
Так говорят абсолютно все кодеры, когда их держут за яйца
мимоглонасс
>> No.12708 Reply
>>12690
так наверняка робот не проходил испытания, а элементная база - от ближайшей бабушки.
другой мимоглонасс
>> No.12716 Reply
Продублирую свой вопрос с другого ресурса: какие книги и в какой последовательности нужно прочитать школьнику из 8го класса, чтобы врубиться и суметь использовать математический аппарат хацкеля? Заранее спасибо.

сам давно уже не школьник, но математику забыл напрочь. Отсюда и формулировка вопроса.
>> No.12717 Reply
>>12654
Ололо, хацкелеблядку разорвало жопу и он утешает себя тем, что через тысячу лет всё изменится и он будет востребован и трудоустроен, а ещё молод, богат и красив, да.
А "фишка вся" в том, что те, кто играет в крузис - его не пишет и даже не компилирует. На рутрекере написано "системные требование два гига оперативы и крутая видяха", он думает, "а, заебца, у меня как раз такой, кочаю!" А тем, кому нужно ещё и что-то писать, приходится думать, реальные ли задачи они ставят перед своим инструментом, другом и слугой. Компьютером, то бишь.
Впрочем, последнее к тебе не относится, по видимому.
>> No.12727 Reply
>>12717
Ты недостаточно добр. Покушай сажи, что ли.
>> No.12729 Reply
>>12716
Алгебра
Матан
Функан
Абстрактная алгебра
Дискретка
Топология
Наконец, Теоркат
>> No.12730 Reply
File: information_items_516.jpg
Jpg, 44.34 KB, 600×450 - Click the image to expand
edit Find source with google Find source with iqdb
information_items_516.jpg
>>12729
Матан, Функан -- зачем оно там, в чём используется?
Абстрактная (общая) алгебра -- вроде понятно.
Дискретка: теория множеств, теория графов, мат.логика. Или что-то ещё?
>> No.12731 Reply
>>12730
А теория цифровых автоматов? Или это у нас в универе выдумали такую дисциплину?
>> No.12732 Reply
File: bastard02_240.jpg
Jpg, 647.50 KB, 1401×1000 - Click the image to expand
edit Find source with google Find source with iqdb
bastard02_240.jpg
>>12731
Чьёрт подерри... Конечно. Нужно и очень часто используется. Спасибо, что исправил.
>> No.12735 Reply
File: Untitled.png
Png, 34.99 KB, 429×263 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
>>12716
будь мужиком, читай отечественных - http://ulm.uni.udm.ru/~nnn/prilog.pdf.
>> No.12740 Reply
>>12730
Я какбы ожидал другой вопрос: нахуй там топология она там и правда факультативна, но ведь доставляет :3.
Зачем матан? А зачем по-твоему базовые знания нужны? Не ты ли ляпнул, что находишься на уровне сосницкого 8 лвла? Так что не возникай, а садись за учебники.
>> No.12744 Reply
О, раз уж вы тут матан обсуждаете, рискну поинтересоваться: можно какие-нибудь конкретные учебники конкретных авторов по указаным дисциплинам? Ну и вообще, ответить на выше заданный вопрос более конкретно: какие именно книги в каком порядке? А то копать очень узкую область можно сколь угодно глубоко, а я весьма подвержен этой напасти - увлекаться. Поэтому буду очень благодарен, если посоветуете курс молодого бойца, так сказать. Что "каждый знать обязан".

Мои знания: дискретная математика, уместившаяся в одноимённый труд by Kenneth Rosen. + несколько углублённо мат.логика, теория графов на уровне базовых алгоритмов. Алгоритмы - трудно сказать, даже Кнута не читал, но нахвататься всякого успел. Алгебра - примерно так же поверхностно, знаю всякие там решётки/группы/поля/кольца, но судя по тому, что сложным мне это не показалось - глубоко не нырял. Линейка - фигово, умею там перемножать матрицы, помню что-то про какие-то линейные преобразования и LU factorization, читал пару книг, но без справочного материала даже не помню, что там вообще зачем было. Матан - ещё хуже, на бытовом уровне, так сказать. Интегралы беру неуверенно, дифуры решать не умею. Топологию вообще не знаю.
Заранее спасибо.
>> No.12745 Reply
Для теории категорий ничего знать не нужно, она вполне себе вещь в себе. Единственное что, непонимание примеров замедляет изучение, но изучение какого-нибудь матана с целью понимания именно категорий, замедлит его еще быстрее.
>> No.12750 Reply
>>12745
Похуй на категории. Хочется чувствовать себя образованным человеком, епт. Тут же есть такие?
>> No.12751 Reply
>>12750
Тогда зачем тебе хардкорная математика? Начинать нужно с прикладных наук, тогда будет понятно, какие пробелы в математике нужно заполнять и почему. Иначе или потонешь в строгости и формальности, или ничего не запомнишь. Грамотная программа в универе обычно таким образом составляется, что математика пересекается с какой-либо естественной наукой, но процессу обучения мешают две вещи:
1. Люди, которые составляли грамотные программы, уже умерли, а теперь их бездумно копипастят. Ну т.е. изучаются свертки одновременно на матане и теории управления - ну издревле так повелось, преподы об этом понятия не имеют, а не потому что составляющий программу хотел, чтобы у студента на матане не возникал вопрос "нахуя это надо".
2. Мозги увидеть параллели есть у меньшинства. У большинства Марс в 30000 км от Земли через неделю будет.
Вот то же LU-разложение, зачем тебе о нем знать, если ты не представляешь, где тебе может потребоваться тот же МНК.
>> No.12752 Reply
File: 1287594948183.png
Png, 183.77 KB, 1228×1072 - Click the image to expand
edit Find source with google Find source with iqdb
1287594948183.png
>>12751
> У большинства Марс в 30000 км от Земли через неделю будет.
Что?
>> No.12757 Reply
>>12752
По вконтактикам такая паста гуляет:
> 27 августа ждет весь мир планета марс будет очень яркой в ночном небе начиная с августа. Невооруженным глазом даже планета будет видна как полная луна.27 августа марс пройдет всего лишь в 34,65 миллионах миль от земли! 27 августа в 00,30 посмотрите на это зрелище. Это будет выглядеть как две луны над землей! Следующий раз когда марс будет так близко к земле будет только в 2287 году.
>> No.12758 Reply
>>12757
Еще есть копипаста где вместо миллионов километров написано 34 тысячи.
>> No.12759 Reply
>>12745
> Для теории категорий ничего знать не нужно, она вполне себе вещь в себе.
Желательно знать основы абстрактной алгебры.
Алгебраические структуры и категории соотносятся как параметрический полиморфизм и тайпклассы.
>> No.12760 Reply
let z = 0:z :: Num a => [a]
И тут же ghc отсылает меня нахуй за такое объявление:
Inferred type is less polymorphic than expected
Причем на z = (0 :: Num a => a):z оно говорит что это вообще [Integer]. Типа не могу объявлять себе бесконечные полиморфные списки? Ну бред естественно, конечно же могу, просто напишу repeat 0 и оно будет иметь нужный мне тип. Причем тот же репит могу написать самостоятельно:
let rep :: a -> [a]
    rep x = x:rep x
И rep 0 будет иметь Num a => [a], но какая нахуй разница между rep 0 и z совсем не понимаю. Что не так делаю-то?
>> No.12761 Reply
File: information_items...
Jpg, 38.20 KB, 600×301
edit Find source with google Find source with iqdb
information_items_1232734622.jpg
File: information_items...
Jpg, 55.81 KB, 596×600
edit Find source with google Find source with iqdb
information_items_1232732149.jpg

>>12735
Кавай! Хотя я предпочитаю -- Сигорский, "Математический аппарат инженера".

>>12730
Здесь вопрос не в том, о чём неплохо бы иметь представление -- а о том, что нужно задрачивать до опупения и ещё столько же. "Конкретная математика" Кнута уже ждёт своей очереди, пряники обещают когда выучу. ^_^

>>12759
Спасибо за пояснение.
>> No.12770 Reply
File: 29921202.jpg
Jpg, 60.59 KB, 489×600 - Click the image to expand
edit Find source with google Find source with iqdb
29921202.jpg
>>12760
Ограничение мономорфизьма. Можно отрубить с помощью опции NoMonomorphismRestriction.
>> No.12772 Reply
>>12770
Ох, подозревал что это оно. Только не понял в чем оно выражается.
>> No.12773 Reply
>>12751
Потому и спрашиваю, что на бордах же ололо специалисты сидят. Когда заканчивают кривляться и строить из себя знатоков - с миру по нитке и общий уровень знаний участвовавших в общении может нехило подняться. Я вот, как ты вероятно догадался, теорию управления не изучал, но с радостью возьмусь (и за неё, и за что угодно ещё, хоть за латынь; да, такой уж я человек), если мне кто-то посоветует, как к этому подойти. Ты же всё очень верно сказал, и ключевое слово в твоей пасте, на мой взгляд, именно программа.
> Вот то же LU-разложение, зачем тебе о нем знать, если ты не представляешь, где тебе может потребоваться тот же МНК.
В том и дело. На себе убедился в малой пользе от обучение строго "по учебнику".
Короче, я всё же был бы благодарен за рекомендацию чего с чем и в каком порядке читать, было бы здорово ещё и парочку практических задачек подкинуть, чтоб было куда смотреть. Просьба нихуёвая, конечно, но учитывая контингент - надеюсь на помощь. Ну или хотя бы отошлите туда, где я смогу найти кого-то кто сможет что-нибудь по этому поводу сказать.
>>12761
Что за книга? Рекомендуется? Можно ли читать саму по себе, или тоже лучше в перемешку с чем-то ещё?
>> No.12775 Reply
>>12773
Там основы дискретной математики: множества, мат.логика, графы, конечные автоматы. Заточено под радиоэлектронику, но и совсем уж начинающему программёру тоже пригодится. Всячески рекомендую.
>> No.12776 Reply
File: 15288558.jpg
Jpg, 436.51 KB, 715×1000 - Click the image to expand
edit Find source with google Find source with iqdb
15288558.jpg
>>12770
Нет, все же я не понял нисколечки. Ограничение мономорфизма накладывается на случаи возникновения неоднозначностей, как понял отсюда:
http://www.haskell.ru/decls.html
Таким образом, хацкель накладывает ограничение, что z = 0:z должен быть определенным типом, чтобы избежать потребности для постоянного вычисления списка для всех типов, выдернутых из контекста. Типа попался Int, то вычисляем z :: [Int], попался z :: [Float], значит вычисление z идет заново. И в случае z :: [Int] придется опять вычислять список, так как подвернулся тип из контекста заранее неизвестный. И тут выходит, что z для одних и тех же типов вычисляется более чем один раз, что противоречит идеологии. Так штоле?

Почему let snub = sort . nub без сигнатуры не работает пока не понял. Не из-за того, ли что nub имеет более обобщенный тип, и из контекста перекинуть ограничение типа Ord на nub не получается?

Короче, давно я себя не чувствовал себя таким глупым.
>> No.12777 Reply
File: Untitled.png
Png, 111.43 KB, 331×570 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
>>12773
> парочку практических задачек подкинуть
впринципе, могу подкинуть(было бы правильно отдельным тредом). Могу дать тестовые таски местных контор. А могу дать убер-таск, который я бы и сам непрочь сделать, но которую неделю болят глаза.
>> No.12780 Reply
>>12777
Буду весьма признателен. И вдвойне признателен, если снабдишь это ну хоть какими отсылками на курсы/учебники, если дело касается всяких ТАУ, ДатаМайнингов, AI, CV и прочих интеллектуальных развлечений.
:: >>12779
>> No.12781 Reply
>>12775
> множества, мат.логика, графы, конечные автоматы
Ну я это худо бедно да знаю. Но в отрыве от всяких радиоэлектроник, сухо, абстрактно. Я имею ввиду - это просто "учебник математики для определённого вида стдентов" или там на самом деле приводятся задачи/примеры на стыке областей? Я к чему клоню - было бы очень здорово найти что-то близкое по духу к лекциям Фейнмана по физике, но делающем упор на сам-понимаешь-чём, а физику, биологию, экономику, чёрт знает что ещё использующем как области применения всего того матана, о котором идёт речь.
>> No.12790 Reply
File: 0_3069e_d9accc3d_L.jpeg
Jpeg, 78.81 KB, 500×375 - Click the image to expand
edit Find source with google Find source with iqdb
0_3069e_d9accc3d_L.jpeg
>>12781
> это просто "учебник математики для определённого вида стдентов"
да.
> было бы очень здорово найти что-то близкое по духу к лекциям Фейнмана по физике
Самому интересно. Но -- подсказать ничего не могу, к сожалению.

ps. Цытата с линупс.огр.ру:
xxx> А зачем этот ваш Хаскель нужен, кто-нить его преподаёт?
yyy> У нас на кафедре им студентов травят; они потом долго плюются.
>> No.12839 Reply
Товарищи программисты на хаскеле, объясните пожалуйста, в чём отличия хаскеля от F#? Выбираю, чем обмазаться.
>> No.12842 Reply
File: erl-hasky-c-f.png
Png, 158.78 KB, 900×601 - Click the image to expand
edit Find source with google Find source with iqdb
erl-hasky-c-f.png
>>12839
Как-то так
>> No.12843 Reply
>>12842
Можно без религии?
>> No.12844 Reply
>>12843
Все по делу же, бугуртяша.
>> No.12845 Reply
>>12843
Как вообще можно выбирать между хаски и фисярпом? Это как выбор между Ламборгини и АвтоТазом. Ну да - у них обоих по 4 колеса, но и разница, блджад, очевидна.
>> No.12847 Reply
>>12839
Ну например, F# заточен под платформу .NET, что означает неэффективную стековую машину, организация памяти как у явы, отсутствие какой-либо полноценной кроссплатформенности.
А ещё F# мультипарадигменный комбайн: со структурными ООП С++ окстылями и прочим мусором.
>> No.12849 Reply
>>12847
> полноценной кроссплатформенности
Меня всё равно только винда и макось интересуют. Скастуйте ссылку на подробное сравнение, пожалуйста?
>> No.12850 Reply
>>12849
> только винда и макось
> макось
Считай, F# для тебя не существует.
>> No.12851 Reply
>>12850
Макось в перспективе, когда я денег на макбук накоплю. Не раньше февраля. А вот ссылочку на сравнение всё-таки хотелось бы, если вам не трудно.
>> No.12852 Reply
>>12850
> Считай, F# для тебя не существует
Да, а как же Mono?
>> No.12853 Reply
>>12839
Похуй с чего начинать, все равно перейдёшь с на Хаскель. Я, кстати, тоже с F# начал. ML-говно, как заметил Братюня - язык переходный. Тем более такое ML-говно, как F#.
>> No.12864 Reply
File: SNC00158.jpg
Jpg, 21.32 KB, 384×288 - Click the image to expand
edit Find source with google Find source with iqdb
SNC00158.jpg
>>12515
А чё таково-та? Я, кстати, трудоустроен.
алкопарашутист
>> No.12867 Reply
File: 1313869796628.png
Png, 1.65 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1313869796628.png
>>12864
айлолд. от капчи тоже.
>> No.12869 Reply
>>12864
На собеседования тоже в берцах и рубашке камуфляжной раскраски ходишь?
>> No.12870 Reply
Задроты в берцах, ненавижу
>> No.12871 Reply
>>12864
Ну ты пиздец. Я думал что парашутюст он вообще куклотюня. Надо перестраивать в голове весь перечень местных неймфагов. Ты на чём пишешь на работе?
>> No.12872 Reply
File: Untitled.png
Png, 31.87 KB, 272×153 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
>>12871
так вроде же ключевые слова по поциэнту: стасик - куклотюня - парашютист - haskell - linq - .net - автодилеры (рольф?), не?
>> No.12874 Reply
>>12872
Куклотюня пишет на JS же, нет? LINQ и .NET это ж Рейфаг? И потом разве он не Дима? Ну и это всё так, мимо, просто я как-то не могу связать в голове образ куклотюни, который у меня записан как "ебанутый адекват", с этим замечательным молодым человеком на фотографии, который на адеквата внешне как-то уж совсем не похож.
>> No.12875 Reply
>>12874
Смотри ДОМ-2 лучше
>> No.12876 Reply
>>12875
Зачем, если можно этим наслаждаться прямо здесь, не отходя от кассы? Имиджборды - весь мир на одной странице!
>> No.12877 Reply
>>12876
Я не люблю шоу уродов, потому что мне их становится жалко. Наслаждаться сложно.
>> No.12878 Reply
>>12877
Ну разве ж он >>12864 урод? Такой милашка!
>> No.12883 Reply
>>12864
По-моему это Вася из саппорта Билайна в Москве.
>> No.12890 Reply
>> No.12968 Reply
>>12875
Люто проиграл.
и правда ведь.
>> No.13048 Reply
У меня тут какая-то хуйня. Чувствую себя идиотом и, видимо, неспроста. Хотел почитать HSoM и застрял на Preface, блджад. Кабал ничего не знаю об Euterpea, нашёл её тут http://code.haskell.org/Euterpea/ , но как, блядь, её оттуда забрать? Я думал это ftp с таким интерфейсом, вот только wget не разделяет мои подозрения и пытается выкачать весь их чёртов сайт. Что делать-то?
>> No.13049 Reply
>>13048
darcs get http://code.haskell.org/Euterpea
cd Euterpea
cabal install
%%http://haskell.cs.yale.edu/?page_id=269%%
>> No.13050 Reply
>>13048
Можно научиться пользоваться вгетом, ман почитать, например.
>> No.13051 Reply
>>13050
Выкачивать дарковскую репу вгетом? Да ты вконец пизданулся, прыщешкольник.
>> No.13052 Reply
>>13051
Мне как-то все равно на репу. Из его поста следует, что вгетом он пользоваться не умеет, ибо
> wget не разделяет мои подозрения и пытается выкачать весь их чёртов сайт
лечится -np
>> No.13053 Reply
>>13049
Спасибо, дорогой.
Блядь, этот cabal хоть что-то ставит без ExitFailure?!
>> No.13054 Reply
>>13052
Мамашу свою полечи, блядь. wget -np выкачает index.html. Замечательная установка.
>> No.13055 Reply
$ wget -c -r -np -nH -R"index.html*" "http://code.haskell.org/Euterpea/" > /dev/null 2>&1 && tree Euterpea | wc -l
617
Давай я просто обзову тебя мудаком, который в своей криворукости обвиняет софт, и пройду куда шел.
>> No.13056 Reply
>>13055
Haskell Way:
darcs get http://code.haskell.org/Euterpea
Ko-ko-ko Way:
wget -c -r -np -nH -R"index.html*" "http://code.haskell.org/Euterpea/" > /dev/null 2>&1 && tree Euterpea | wc -l 617
Иди-иди.
Кстати, лично я никого ни в чём не обвинял.
>> No.13058 Reply
>>13053
Нет, так не интересно же
включи уровень логгирования повыше, скорее всего каких-нибудь либ не хватает, она дохуя всего использует
>> No.13059 Reply
>>13058
Справился уже, спасибо. Правда, во-первых, на это ушло совсем не так мало времени, как хотелось бы, а во-вторых, песенку оно мне так и не сыграло, timidity говорит, что Couldn't open output device. Задолбало уже, блин. Сейчас спать пойду, буду завтра мучать, если не забуду. И если не образумлюсь, и не решу, что проводить за компом нерабочее время - нехорошо.
Так или иначе, первое знакомство оставило не слишком приятные впечатления. Надеялся уже к этому моменту дойти до второй главы, посмотреть Рейлган и лечь спать. А в результате только Рейлган посмотрел. Досадно.
>> No.13060 Reply
>>11962
Я хочу написать сайт с чатом на хаскелле. Чо посоветуешь, Хаскачь?
>> No.13064 Reply
>>13059
У тебя что за ОС?
>>13060
happstack - криво, хуёво, но, блядь, работает, в отличие от остальных.
yesod - наркоманская хуйня, для работы с которой помимо хаскеля придётся изучить неведомые ёбаные языки, реализованные автором на TH. И да, в yesod дохуя TH. Советую стать контрибутором и добавить еще TH. Из плюсов - это единственный фреймворк, автору которого не похуй на свое творение. Да, он действительно его пилит правда куда-то в сторону Омска причем уже не первый год, что в мире Хаскеля весьма редкое явление.
snap - прыщи-онли низкоуровневая хуйня.

Все остальное мертво.
алкопарашютист
>> No.13089 Reply
Вообще хачушки не умеют в фреймворки. Посему - FastCGI
>> No.13091 Reply
>>13064
Зря ты так Yesod вполне себе неплох и логичен. Happstack слишком прост и топорен, это да.
>> No.13098 Reply
>>13064
Убунта ж. 11.04. Ставил-переставлял АЛСУ, целую коллекцию тимидитей уже собрал, но что-то, видимо, всё-таки пропустил.
>> No.13100 Reply
>>13098
Нужно установить renoise и потом указать в качестве миди-источника для какого-нибудь канала что-то вроде “Зохватывать всё МИДИ!!!!111“. Тока если ты не работал с ренойсом и срутилупсом, может у тебя не получиться послушать факториалы. Как прилечу домой тебе картинок наделаю.
>> No.13103 Reply
>> No.13104 Reply
File: 1238657559462.jpg
Jpg, 10.24 KB, 250×250
Your censorship settings forbid this file.
unrated
>> No.13105 Reply
>>13104
а есть пак подобного добра?
>> No.13106 Reply
File: creatiff.png
Png, 79.30 KB, 748×348 - Click the image to expand
edit Find source with google Find source with iqdb
creatiff.png
>>13105
отклеилась
>> No.13111 Reply
>>13100
Пиздецовй интерфейс у этого ренойза. И это не говоря о том, что это само по себе оверкилл. По идее ведь перехватить миди должет и этот самый тимидити, только он этого почему-то не делает, а значит, я что-то делаю неправильно.
>> No.13112 Reply
>>13111
Напиши синтезатор в wav сам, йоба
>> No.13113 Reply
File: 844b2bad0091dcafbe69c8c7af4b8334.jpg
Jpg, 214.79 KB, 1000×651 - Click the image to expand
edit Find source with google Find source with iqdb
844b2bad0091dcafbe69c8c7af4b8334.jpg
О, внезапно нашёл нужную кнопку. BassDetunedWobbler сыграл мне childSong6. Я такого даже в фильмах ужасов не слышал. Выглядит как неплохое развлечение.
Хотя всё равно это, конечно, пиздец, использовать навороченный секвенсор для проигрывания мелодий создаваемых хаскелем в образовательных целях.
>> No.13114 Reply
>>13113
Это нормально, я, например, при отладке VST гружу jeskola buzz с тестовым треком. Это позволяет не заморачиваться со многими вещами (например, бояться оглохнуть от ошибки в алгоритме, который начал выдавать /dev/random - в цепи лимитер стоит) и тестить в боевых условиях.
Ренойз, кстати, не особо наворочен.
>> No.13115 Reply
>>13114
блин, почитал последние сообщения в треде - почувствовал себя обратно линуксоидом.
>> No.13116 Reply
>>13115
Linukz has no musak. Только DOS
http://www.youtube.com/watch?v=aBjclT_R-ko
>> No.13117 Reply
File: t4_016.jpg
Jpg, 23.93 KB, 324×291 - Click the image to expand
edit Find source with google Find source with iqdb
t4_016.jpg
>>13116
Я его в школе слушал. Он на писиспикер умел херачить, причем довольно сносно. Такое чувство, что все нормальные программы остались в прошлом тысячелетии.
алкосамизнаетекто
>> No.13118 Reply
File: ptl72_003.jpg
Jpg, 21.49 KB, 300×276 - Click the image to expand
edit Find source with google Find source with iqdb
ptl72_003.jpg
>>13117
Кстати, самая охуенная игрушка для обработки звука из тех, что я видел: http://www.youtube.com/watch?v=jFCjv4_jqAY. Если хаскельпитуки со своей школой музыки не смогут дать на монады этому немцу-крестопитушку, то это отсос, как ни крути.
ктобывыдумалитист
>> No.13120 Reply
>>13118
Питч-корректор подобного рода первым сделали американцы antares. Autotune стало именем нарицательным. Сейчас их чуть не в чайники встраивают, во всех секвенсорах есть аналоги.
На монады придется дать очень много, потому что не понятно, зачем делать код тормознее, чем у конкурентов. Учитывая то, что реалтаймовые алгоритмы занимают очень мало строчек кода просто потому что нужно рожать два флоата за 1/44100 секунды и грузить при этом не более 5% ядра, короче он ни на чем не выглядит. Я пробовал заменять ghci матлаб, но пока получается бесконечное велосипедостроение.
>> No.13121 Reply
File: image010.gif
Gif, 12.17 KB, 283×259 - Click the image to expand
edit Find source with google Find source with iqdb
image010.gif
>>13120
Не-не-не, девид блейн. Давай ты для начала покажешь код, или хотя бы на пальцах объяснишь, как разложить на ноты гитарный аккорд, потом посмотрим. Я ужмолчу про просто охуенный гуй да-да, почему-то все прыщетеоретики упускают его из виду, в итоге любое пыщеговно - неюзабельное глючное прыщеговно, создание которого - уже отдельный челлендж. И, наконец, мне похуй на скорость, в конце концов я сам помогу тебе задрочить её на GHC.Prim, если там действительно, как ты говоришь, два флота. Мне просто интересно, помогут ли 20 профессоро-лет, вбуханные в разработку языка и компилятора, хаскипитушкам в борьбе с этим очаровательным волосатым дедушкой, или все ваши теории котегорий, монады, блядь, функторы всякие - полная хуйня, не позволяющая подняться даже на уровень досовких трекеров (напоминаю, их писали just for lulz в одну харю) и сишечка рвёт всех несмотря на потуги хаскитеоретиков.
бла-бла-бла-ла-ла-ла
>> No.13122 Reply
File: d5_1.jpg
Jpg, 28.00 KB, 423×450 - Click the image to expand
edit Find source with google Find source with iqdb
d5_1.jpg
Хаскипитушки, не расслабляйтесь: http://www.youtube.com/watch?v=cKCNKI4SMpg
>> No.13123 Reply
File: image005.jpg
Jpg, 72.46 KB, 467×756 - Click the image to expand
edit Find source with google Find source with iqdb
image005.jpg
Кстати, я тут подумал, ведь ни один человек не попадает в ноты идеально. Соответственно, если корректировать его голос детерминированным алгоритмом, он будет звучать слишком неестественно. Думаю, имеет смысл специально вносить некоторую погрешность. Что сделать, чтобы она выглядела наиболее естественно? Цепи Маркова? Тупо белый шум? Фракталы? Что скажете, поющие хаскелисты?
>> No.13126 Reply
>>13121
> Давай ты для начала покажешь код
Не психуй, ты че психуй?
>>13123
> Что скажете, поющие хаскелисты?
Скажу, чтобы ты спросил у специалистов по DSP и физическому моделированию голоса, а не у хаскеллистов. Хаскеллисты в ХШоМ используют мидю и тому подобное только чтобы лишний раз интересно поиграться с хачкелем. Для них это игрушечная предметная область.
>> No.13132 Reply
>>13121
хуиту несёшь, совсем спился.
> помогут ли 20 профессоро-лет, вбуханные в биохимию клетки залить правильный фундамент на даче?
>> No.13146 Reply
>>13132
> совсем спился
Удваиваю. Очередной пример пагубного воздействия алкоголя на человека. А если это всё-таки был куклотюня (хотя это совсем невероятно), то я вообще больше бухла в рот не возьму.
>> No.13147 Reply
File: 1314467029589.png
Png, 1.55 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1314467029589.png
>>13146
похоже, будем бросать всей бордой. олсо, капча стронгли рилейтед.
>> No.13148 Reply
>>13121
> Давай ты для начала покажешь код, или хотя бы на пальцах объяснишь, как разложить на ноты гитарный аккорд, потом посмотрим.
Аккорды раскладываются до сих пор весьма хуево, мелодин не исключение. И вряд ли что-то изменится, потому что это не каждому человеку под силу. Навскидку:
1. 12 comb-фильтров + амплитудный детектор. По фильтру на каждую ноту. Comb-фильтр - это складывание сигнала со своей смещенной копией. От такого фильтра получается спектр в виде расчески, как раз как ухо оценивает ноту (55, 110, 220 Гц - одна и та же нота, ля). Амплитудный детектор считает RMS, далее выбираем максимумы. Дешево, нет задержек и не требует памяти. Для китайского тюнера самое то.
2. FFT + подсчет энергии для каждой ноты. Гибче. Если не брать движение во времени, то
[code]
fs = 44100;
[a, fs] = wavread('file.wav');
spectrum = abs(fft(a));
spectrum = spectrum / max(spectrum);
freqToPos = @(freq) freq * length(spectrum) / fs;
cNote = freqToPos(55 * 2^(-9/12));
rootNotes = cNote * 2.^((0:11)/12);
highestFreq = fs * 0.25;
noteWidth = 2^(0.5/12);
i = 1;
for rootNote = rootNotes
freqs = rootNote:rootNote:highestFreq;
energy(i) = sum(arrayfun(@(freq) sum(spectrum(round(freq/noteWidth):round(freq*noteWidth))), freqs));
i = i + 1;
end
plot(energy);
[/code]
На хаскеле код будет отличаться не сильно, но будет длиннее из-за преобразований типов между Data.WAVE, Math.FFT и IArray.
Алгоритм, работающий с данными во времени, будет сложнее сложнее, потому что нужно фильтровать различного рода щелчки и прочее. Это уже будет интеллектуальной собственностью, но код при этом намного длиннее не будет.
Суть автотюна не в этом, а в питче без изменения длительности с помощью алгоритма phase vocoder (см. http://labrosa.ee.columbia.edu/matlab/pvoc/) Там тоже делаем FFT, потом меняем растягиваем/сужаем спектр, корректируя фазу. Размер файла pvsample.m сам оцени - единственное что, в матлабе arr(:) ознаначает операцию по элементам матрицы arr, без всяких map, поэтому все компактно. Но на асме какого-нить DSP-процессора алгоритм намного длиннее не будет.
>>13123
Ну ты бы хотя бы мелодин этот скачал. При непопадании на 25% голос корректируется до 5% и все. Если сплющить все переходные процессы, будет канье уэст.
>> No.13156 Reply
>>13148
> freqs = rootNote:rootNote:highestFreq;
Сделал ошибку (нужно freqToPos(highestFreq)), а если бы была система типов с поддержкой единиц измерений, все могло бы сложиться иначе.
>> No.13160 Reply
>>13156
В F# есть.
>> No.13161 Reply
>>13160
Ого, неужели в F# что-то есть. И наверняка сообщения об ошибках человеческие, а не couldn't match type Mul d' d d''
>> No.13162 Reply
File: синица.jpg
Jpg, 55.68 KB, 640×459 - Click the image to expand
edit Find source with google Find source with iqdb
синица.jpg
Ёбаное говно, почему блядский cairo опять под виндой не устанавливается?
'"cpp" не является внутренней или внешней
Чё это за хрень ваше?
>> No.13163 Reply
>>13162
> '"cpp" не является внутренней или внешней
в path что?
>> No.13165 Reply
File: Безымянный.jpg
Jpg, 81.20 KB, 830×467 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.jpg
Да, уже заметил, в path хуйня, видимо ставил бухим.
Сейчас новое чудо:
'setup.exe: internal error: unexpected package db stack: [UserPackageDB]
>> No.13166 Reply
>>13165
Строгая типизация на страже от багов: http://hackage.haskell.org/trac/hackage/ticket/812
>> No.13174 Reply
>>11962
Объясните мне шутку про штангу.
>> No.13175 Reply
File: z150_22.jpg
Jpg, 49.66 KB, 618×418 - Click the image to expand
edit Find source with google Find source with iqdb
z150_22.jpg
>> No.13176 Reply
    mean :: Floating a => [a] -> a
    mean l = sum l / fromIntegral (length l)
    
    sdev :: Floating a => [a] -> a
    sdev l = sqrt $ (sum $ map f l) / (n - 1) / n
      where f :: Floating a => a -> a
            f x = (x - m)^2
            m = mean l :: Floating a => a
            n = fromIntegral (length l) :: Floating a => a
Ну блять, я задолбался воевать с компилятором по этому поводу:
J.hs:12:12:
    Inferred type is less polymorphic than expected
      Quantified type variable `a' is mentioned in the environment:
        m :: a (bound at J.hs:13:12)
    When trying to generalise the type inferred for `f'
      Signature type:     forall a. (Floating a) => a -> a
      Type to generalise: a -> a
    In the type signature for `f'
    When generalising the type(s) for `f'

J.hs:13:16:
    Couldn't match expected type `a1' against inferred type `a'
      `a1' is a rigid type variable bound by
           an expression type signature at J.hs:13:35
      `a' is a rigid type variable bound by
          the type signature for `sdev' at J.hs:9:21
    In the expression: mean l :: (Floating a) => a
    In the definition of `m': m = mean l :: (Floating a) => a
    In the definition of `sdev':
        sdev l = sqrt $ (sum $ map f l) / (n - 1) / n
               where
                   f :: (Floating a) => a -> a
                   f x = (x - m) ^ 2
                   m = mean l :: (Floating a) => a
                   n = fromIntegral (length l) :: (Floating a) => a
Failed, modules loaded: none.
Убираю сигнатуры типа после where — ошибки пропадают. Так какой там тип, мать его? И что прочитать нужно, чтобы не заходить в тупик с такой хуйнёй?
>> No.13177 Reply
>>13176
> сигнатуры типа после where
но зачем?
Ты бы лучше не страдал хуйней, а нормальную mean написал вместо этого ебаного ужаса.
>> No.13184 Reply
>>13177
Хорошо-хорошо, перепишу. Но косяк-то в чем? Опять это ограничение мономорфизма?
>> No.13185 Reply
>>13184
Полагаю, что ты думаешь, будто бы область видимости параметра типа a распространяется на все объявление функции, но это не так. Только на указание типа. В forall a. Floating a => [a] -> a и forall a. Floating a => a -> a a разные, получается что тип у x и m разный - отсюда ошибка. Собственно, GHC 7 так и пишет: Could not deduce (a ~ a1)
>> No.13459 Reply
Посоветуйте няшногуевое иде для хацкиля
>> No.13460 Reply
>>13459
leksah, не?
>> No.13461 Reply
>>13459
Есть Leksah, но лучше уж Emacs.
>> No.13462 Reply
>>13459
Этим летом в ходе GSoC поддержку хаскелля в Eclipse серьезно допилили.
Попробуй, вдруг понравится: http://eclipsefp.github.com/
>> No.13465 Reply
>>13462
Я как-то пробовал недавно. Долго проебался, а в результате наворачивал горы муторных ошибок, еще и выскакивающих отдельными диалогами, прямо когда ты пишешь код. Сыроватая пока штука.
Как ни странно, глючный алтфажный красноглазый прышефонатичный емакс с примитивными скобкоскриптами, написанными на коленке, до сих пор юзабельнее лекс, ййи, клипсофепе и т.д.
>> No.13466 Reply
>>13465
так давайте допилим всей бордой.
>> No.13467 Reply
>>13465
Даже не знаю, я его месяцев 6 назад трогал - все работало. Правда очень текло сильно и по возможностям недалеко от емакса находилось.
Для него, кстати, новый хаскеллемод анонсирован: http://chrisdone.com/posts/2011-08-21-haskell-emacs.html
Прозреваю былинный фейл со всеми этими TAGS и автокомплитами.
>> No.13491 Reply
Что нужно для емакса для комфортной работы?
>> No.13497 Reply
>>13491
Опыт использования емакса как минимум пару месяцев. Остальное - мелочи.
>> No.13498 Reply
>>13497
Я и спрашиваю про мелочи.
>> No.13525 Reply
>>13498
> Я и спрашиваю про мелочи.
Они для каждого примата свои, потому сравнивать бесполезно. Читай чужие конфиги, смотри как и где настроено, нужно ли это именно тебе...

Емакс нужен, если тебе проще запомнить некоторое кол-во клавиатурных комбинаций вместо мышевозятельства, дописать свои скрипты -- вместо поиска плагинов. В остальных случаях лучше остаться на гламурных иде с одной кнопкой "сделать всё зашибись".
>> No.13546 Reply
>>13525
Не только. Для меня одно из главных его достоинств - удобный текстовый редактор. Мне очень тяжело работать в средах, где нельзя поотключать целиком статус-бары, меню, перекрасить все цвета, выбрать идеальный для глаз шрифт и отключить мигание каретки, превратив её попутно из тонкой режущей глаза линии в нормальный человеческий полупрозрачный прямоугольник.
>> No.13547 Reply
>>13546
> Не только
> > Они для каждого примата свои, потому сравнивать бесполезно
:))
>> No.13551 Reply
>>13547
И что смешного? Я всего-лишь говорю еще один случай где он именно НУЖЕН, потому что в ИДЕ такого не сделаешь.
>> No.13553 Reply
File: dog_and_cat.jpg
Jpg, 194.91 KB, 1000×750 - Click the image to expand
edit Find source with google Find source with iqdb
dog_and_cat.jpg
>> No.13554 Reply
>>13553
А, понял.
>> No.13558 Reply
Дочитал Sicp до множественный представлений, диспетчеризации типов и пересылке сообщений etc. Проникся всем этим великолепием, но возник вопрос.
Вот открываю ghci и пишу что-нибудь вроде:
Prelude> import Complex
Prelude Complex> (1 :+ 2) ** fromIntegral (2 :: Int)
(-3.0) :+ 4.000000000000002
Так каким образом в хаскилях реализованны такие-то попрыгушки по абстрактным представлениям? Ведь fromIntegral :: (Num a, Integral b) => b -> a это значит, что в правом операнде ** стоит Num a => a, а в левом RealFloat a => Complex a и тут на тебе, все это быстро приводится к RealFloat a => a, и результат выходит такого же обобщенного типа.

Как такую херню написать для своей произвольной иерархии тайпклассов?
>> No.13559 Reply
>>13558
(RealFloat a) => Complex a а не RealFloat a => a конечно же.
быстрофикс
>> No.13560 Reply
>>13558
Важно понять, что тайпклассы - это чисто-абстрактный уровень косвенности, существующий только до определённого этапа компайл-тайма. А вот уже АТД - это тот же сорт тегированной динамики, что и в лиспе жестко для всего сущего, только не такой анально заоптимизированный.
>> No.13561 Reply
>>13525
Примерно то же самое о линуксах говорили лет 10 назад, что сорцы это очень круто, потому что можно соптимизировать все под свою систему, а ведь у каждого примата своя система. Через 10 лет оказалось, что пакеты и установка всего за полчаса рулят, а настройки всем нужны одинаковые. И только приматы-гентушники неделями красноглазят собирая все именно под свое уникальное железо.
>> No.13562 Reply
>>13560
Инересно узнать, в чем ты видишь сходство? И в чем заключается оптимизация?
>> No.13563 Reply
>>13562
В том, что они реализованы тегированными юнионами с динамическим диспатчем по тегу.
Оптимизация в том, что в Лиспе используются тегированные указатели:
http://sbcl-internals.cliki.net/tag%20bit
>> No.13564 Reply
>>13561
> сорцы это очень круто, потому что можно соптимизировать все под свою систему
Само собой. Проблема в том, что типичный десктоп с 386 не сильно изменился, и оптимизировать в общем-то нечего.
>> No.13565 Reply
>>13563 ++
Ну то есть, в хачкеле в случае с анбоксед - тег + данные, боксед - тег + указатель,
а в лисп - тег - часть указателя.
>> No.13567 Reply
>>13564
Ну вот по-моему я по сравнению с другим пользователем хаскельмода тоже не сильно изменился. То, что у меня также техмод стоит другая история. Однако типичный юзер емакса начинает говорить о том, что армия школа жизни страдай, как я страдал, собирая все свои скрипты и компилируя убероптимизированное ведро.
>> No.13568 Reply
>>13567
Типичный пользователь емакса просто не знает, как можно сделать из емакса что-то более-менее достойное по-другому.
Пользоваться какой-нибудь удобной ИДЕ искоропки могу, текстмейтами-саблимтекстами - спокойно, емаксом - ни в какую. Больно уж он приподвывихнутый.
Из готовых конфигов наиболее популярен https://github.com/technomancy/emacs-starter-kit и его форки, коих на гитхабе тысячи. Пробуй сам, лично мне не понравилось.
>> No.13569 Reply
>>13560
Ну окей, только твой абзац не добавил понимания ни на йоту. Только введ до кучи терминов, которые у меня не ресолвятся. Ну вот например: «абстрактный уровень косвенности», «АТД». Если щеголяете терминами, кидайте хоть ссылки на статьи, чтобы просвятиться.

Вопрос остался в силе, каким образом можно изменить представление на лету, если все операторы арифметики замкнутые?
>> No.13570 Reply
>>13569
> Ну окей, только твой абзац не добавил понимания ни на йоту.
Разумеется не добавил. Не слушай его - он не понимает о чем говорит. Лиспер же.
> Вопрос остался в силе, каким образом можно изменить представление на лету
Представление не меняется.
>> No.13571 Reply
>> No.13572 Reply
>>13570
> Не слушай его - он не понимает о чем говорит.
Хорошо.
> Представление не меняется.
Погоди, там же явно RealFloat a => Complex a, а оно хранит два значения и конструируется с :+. Это должно сильно отличаться от представления того же Int, который «вшит» в реализацию, если ничего не путаю. Выходит что тут было приведение к RealFloat a => Complex a а у него другое представление.
>> No.13573 Reply
>>13572
Значение RealFloat a => Complex a ничего не хранит. Это функция с двумя аргументами. Один - для параметра типа a, второй для словаря класса RealFloat. Когда это значение будет специализировано - по параметрам протянут функции, которые и вычислят результат. Никаких приведений тут тоже пока нет. Для трех числовых литералов будет вызвана ф-я GHC.Num.fromInteger, которая также принимает на вход вышеуказанный словарь класса, в котором есть функции "приведения".
>> No.13574 Reply
>>13572
Вообще, классы типов имеют мало общего с тем, что описывается в SICP там, где говорится о диспетчеризации. Чтоб узнать, как они работают прочти "How to make ad-hoc polymorphism less ad hoc" Philip Wadler, Stephen Blott.
>> No.13575 Reply
> Хватит уже фантазировать.
> Не слушай его - он не понимает о чем говорит.
Можешь почитать: http://en.wikipedia.org/wiki/Tagged_union
Еще рекомендую посмотреть рефлектором, во что превращаются adt в фисярпе.
> http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/HeapObjects
Интересно, конечно, но что это меняет?
>> No.13576 Reply
>>13572
А тебе, чтобы понять тайплклассы, рикамендую смотреть на них как на аналог перегрузок функций из Си, только более гибкий (с параметрическим полиморфизмом и возможностью диспатчеризации по типу возврата) и более модульный (несколько перегрузок внутри одного тайпкласса). Просто способ называть разные вещи одинаковым именем. А компилятор всё разрулит и переименует.
>> No.13578 Reply
>>13573
Впрочем, меня кажется осенило в чем тут соль. Да, насчет «привидения» выразился неправильно. Вижу решение проблемы следующим образом:
Complex a по хорошему включается в Floating a, значит всю цепочку включений Eq a => Num a => Fractional a => Floating a проходит и инстансы навставляет. В пределах каждого включения есть какое-то «представление» которое является основным (нестрого говоря, потому что формально-то этого ничего нет). Для Num a им будет Integer. Таким образом вводим в Num a функцию fromInteger :: Num a => Integer -> a и каждый инстанс Num обязательно её содержит.
Отсюда получаем замечательную штуку: любой тип включенный в Num умеет конструировать себя из Integer. В выражениях типа выше сперва идет вывод типов, а потом уже вызывается та функция fromInteger, которая приводит челое к комплексному с нулевой мнимой.

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

За пояснения спасибо и за книгу, вечером буду гуглить.
>> No.13583 Reply
Как правильно выбирать значения из жсона?
Нагуглилось вот это http://stackoverflow.com/questions/2089194/example-of-how-to-parse-exiftool-json-output-in-haskell/2089385#2089385
Prelude Text.JSON> decode "{'value1': 257, 'value2': 1310124099.36818, 'value3': 'mob'}" :: Result JSValue
Error "Malformed JSON: expecting string: 'value1'"
>> No.13584 Reply
File: 1-3835744-4954-t.jpg
Jpg, 4.46 KB, 128×171 - Click the image to expand
edit Find source with google Find source with iqdb
1-3835744-4954-t.jpg
>>13583
> decode "{'value1': 257, 'value2': 1310124099.36818, 'value3': 'mob'}"
JSON не яваскрипт, там строки обозначаются только двойными кавычками. Надо писать "{\"value1\":257 ...
>> No.13585 Reply
>>13584
Ok (JSObject (JSONObject {fromJSObject = [("value1",JSRational False (257 % 1)),("value2",JSRational False (65506204968409 % 50000)),("value",JSString (JSONString {fromJSString = "mob"}))]}))
А как дальше из этого вытаскивать нужные значения value#?
>> No.13586 Reply
File: Untitled.png
Png, 35.84 KB, 1033×255 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
>>13585
> А как дальше из этого вытаскивать нужные значения value#?
Для этого в хачкеле есть патермачинг -- универсальный механизм для распидорашивания композитных объектов.
>> No.13587 Reply
>>13583
Хуёво нагуглилось. Единственная юзабельная json-либа для хаскелля - aeson. Кроме нее удобно мапать json на типы хаскелля не умеет никто. Без нее придется как инвалид >>13586 вручную пидарасить дерево паттерн-матчингом.
>> No.13588 Reply
>>13587
> Без нее придется как инвалид >>13586 вручную пидарасить дерево паттерн-матчингом.
Зато с ней можно вножную в очередной раз укомбинироваться парсеком. Звучит заманчиво!
>> No.13600 Reply
>>13587
Покажешь как?
>> No.13601 Reply
>>13586
Подскажи название колорсхемы и шрифта, няша.
>> No.13611 Reply
>>11962
Быдлокодер, мозги вроде есть, но крайне ограниченная база знаний (посему приходится постоянно гуглить). Более-менее нормально могу лишь в плюсы (ну еще в пэхэпэ, но что-то мне говорит, что в глазах здешних анонов мне это ничего не добавит). Что взять за основу для изучения Хаскеля (сайт/книга)? Предложения из рода "лучше бы для начала в Перл научись" тоже принимаются, при условии наличия всё тех же ссылок/названий.
>> No.13612 Reply
>>13611
имхо, изучать хаскелль только по тому, что кресты и пхп "не модно" - плохая идея.
мимоудивлялся
>> No.13613 Reply
>>13612
А кто сказал, что причина в этом? Просто миморассказы про хаскелл мне понравились, вот и решил изучить для себя. Альзо, ходят слухи, что это перспективно, но это мне пока что можно в рассчет не брать.
>> No.13614 Reply
>>13613
> расчет
>> No.13616 Reply
>>13601

Че то вроде этого
;; Color-theme
(add-to-list 'load-path "~/.emacs.d")
(add-to-list 'load-path "~/.emacs.d/color-theme")
(require 'color-theme)

(color-theme-initialize)
(color-theme-charcoal-black)


;;; Colors in shell
;;; Shell mode
(setq ansi-color-names-vector ; better contrast colors
      ["black" "red4" "green4" "yellow4"
       "blue3" "magenta4" "cyan4" "white"])
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(c-basic-offset 8)
 '(c-default-style (quote ((c-mode . "linux") (c++-mode . "linux") (objc-mode . "java") (java-mode . "java") (awk-mode . "awk") (other . "gnu"))))
 '(c-objc-method-arg-min-delta-to-bracket 8)
 '(c-objc-method-arg-unfinished-offset 8)
 '(c-objc-method-parameter-offset 8)
 '(haskell-program-name "~/Tools/Haskell/bin/ghci")
 '(initial-buffer-choice "~/Projects")
 '(rst-adornment-faces-alist (quote ((t . font-lock-keyword-face) (nil . font-lock-keyword-face) (1 . font-lock-keyword-face) (2 . font-lock-keyword-face) (3 . font-lock-keyword-face) (4 . font-lock-keyword-face) (5 . font-lock-keyword-face) (6 . font-lock-keyword-face))))
 '(tcl-application "tclsh8.5"))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(default ((t (:inherit nil :stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 100 :width normal :foundry "unknown" :family "DejaVu Sans Mono")))))
>> No.13617 Reply
>>13611
Начинай с The Haskell School of Expression дальше читай Typeclassopedia (http://www.haskell.org/wikiupload/8/85/TMR-Issue13.pdf), дальше статьи по ссылкам в тайпклассопедии, викикнигу (http://en.wikibooks.org/wiki/Haskell), а точнее отдельные главы. Ну и вики на haskell.org.
Некоторые няшечки могут посоветовать Душкина (беги от этой книги, как от чумы), Грема Хаттона или "Изучи себе хаскель во имя великой справедливости" - не слушай их, только напрасно потратишь время.
>> No.13618 Reply
>> No.13619 Reply
File: 1219183028419.jpg
Jpg, 30.27 KB, 286×214 - Click the image to expand
edit Find source with google Find source with iqdb
1219183028419.jpg
>>13618
СУКА БЛЯТЬ ЧТО ЭТО ЗА СТРЕЛОЧКИ ЕБАНУТЬСЯ
>> No.13620 Reply
>>13619
Какие?
>> No.13621 Reply
>>13618
> Demo.hs
> куча квалифированных импортов, монад, говна, полстраничных комментариев "так блять епта щас мы эту хуйню засунем вон в ту пиздюлину", кишок, снова монад, директив компилятора
> распарсили "{\"message\":\"hello world\"}"
Такой-то аесон.
>> No.13622 Reply
>>13601
Тема Charcoal Black
>> No.13628 Reply
>>13621
Куча квалифицированных импортов там потому, что аесон работает только с bytestring. Автор аесона вполне справедливо решил, что жсон представляет собой интерес лишь как средство общения с внешним миром, который использует байтостроки. Поэтому на хеллоуворлде приходится сначала конвертировать обычную строку в байтопредставление, а потом парсить. ИРЛ на входе уже будет байтострока и соснут те, кто умеет парсить только хаскистроки.
>> No.13631 Reply
Вот кстати тиречеры как раз aeson заюзали http://darcsden.com/pseudonymous/2chsotools/browse/2chso по-моему неплохой пример
>>13628
> ИРЛ на входе уже будет байтострока и соснут те, кто умеет парсить только хаскистроки.
Ну вообще можно сказать, что ИРЛ например на входе может быть юникод, например если сервер уже разобрался с кодировками. Но мне в исходники за примерами лезть неохота, да и ты не особо их приводишь, так что симметрично.
>> No.13635 Reply
File: 1301578649136.jpg
Jpg, 287.29 KB, 848×1200 - Click the image to expand
edit Find source with google Find source with iqdb
1301578649136.jpg
>>13575
Это ничего не меняет. Это просто показывает, что твои рассуждения про хранение тега вместе с полями - высосанные фантазии и лиспоикспертиза. Тег хранится в одном экземпляре InfoTable для каждого определенного в коде конструктора, а для АТД с малым числом конструкторов - как часть указателя (да, указатели на функции и конструкторы в GHC тегированные, но не типом - тип указателя в компайл-тайм известен, а арностью функции или индексом конструктора), чтоб InfoTable в кэш не тащить.
Такая же фантазия - аналогия АТД с тегированными типами в динамике. В GHC type erasure, а конструктор - это не тип, просмотр реализации АТД в эфсярпе тут тебя только с толку сбивает.
>>13576
Чтоб понять тайпклассы - не рекомендую представлять их тем, чем они не являются, а рекомендую представлять тем, чем они являются, т.е. словарями функций, протягиваемыми через параметры.
Функция forall a. Yobable a => a -> Yoba a после преобразования в Core становится функцией a -> YobaDictionary a -> a -> Yoba a >>13578
> Complex a по хорошему включается в Floating a
Нет, не включается. Потому, что Floating a - это не тип, а констрейнт.
>> No.13636 Reply
>>13635
> высосанные фантазии и лиспоикспертиза
Так и есть, но я считаю, лучше называть это метаикспертизой.
Тег в любом случае хранится в рантайме с каждым экземпляром сум-типа, потому что это единственный способ определения при, например, паттерн-матчинге, какой конкретно кейз данного типа попался в данный момент.
Тегом может быть число сбоку, биты в указателе, какие-нибудь особенности структуры объекта и т.д.
В хачкеле, правда, есть только первое и второе.
>> No.13637 Reply
> словарями функций, протягиваемыми через параметры.
Это особенности реализации. Хотя, конечно, лучше от сиблядков утаивать правду, ведь очевидная аналогия тайпклассов с их перегрузками функций ломает всю романтику.
>> No.13638 Reply
File: 1299865961439.png
Png, 455.42 KB, 1280×720 - Click the image to expand
edit Find source with google Find source with iqdb
1299865961439.png
>>13636
> Тег в любом случае хранится в рантайме с каждым экземпляром сум-типа
Ты, няшечка, что же - %наркоман%? Или может ты в шары долбишься, пардон май френч? Я же тебе языком Пушкина и, блядь, Достоевского написал, что тег хранится не с каждым экземпляром. Он в InfoTable которых N на все экземпляры типа-суммы с N конструкторами.
>>13637
> Это особенности реализации.
Допустим, но это облегчает понимание, а твои нелепые аналогии - нет.
> Хотя, конечно, лучше от сиблядков утаивать правду, ведь очевидная аналогия тайпклассов с их перегрузками функций ломает всю романтику.
Все пропало: сгущеночный иксперт всех разоблачил. Как ты их статическое поведение воспроизведешь-то перегрузкой функций? (ладно бы еще темплейты с концептами попытался на глобус натягивать), я уже не говорю про рантайм-диспатч в случае полиморфизма с рангом больше одного.
>> No.13639 Reply
>>13638
> Как ты их статическое поведение воспроизведешь-то перегрузкой функций?
В простых случаях просто и воспроизводится:
class C a where f :: a -> Int
instance C Int   where f x = 1 + x
instance C Float where f x = 1 + floor x
int f (int x) {
  return 1 + x;
}
int f (float x) {
  return 1 + round(x);
}
А сложные - нет, но у меня там и написано
> только более гибкий (с параметрическим полиморфизмом и возможностью диспатчеризации по типу возврата) и более модульный (несколько перегрузок внутри одного тайпкласса)
> Он в InfoTable которых N на все экземпляры типа-суммы с N конструкторами.
Ну хорошо - для каждого. Перекладывание тега с полки в шухлядку не меняет сути - это сорт динамического петушения. И тут и там у объектов есть теги, по которым происходит диспатч. В скриптах этот диспатч - мультиметоды, в хачкеле - паттерн-матчинг.
>> No.13640 Reply
>>13639
> round(x);
floor, конечно же.
>> No.13641 Reply
> единственный способ определения при, например, паттерн-матчинге, какой конкретно кейз данного типа попался в данный момент.
А как же статические убер-оптимизации
>> No.13643 Reply
>>13641
Чтобы приблизительно осмыслить, какой природы процесс статического определения кейза сум-типов, достаточно рассмотреть конкретный их частный случай - целые числа (Int = 0 | 1 | 2 | ...). Ну так как ты думаешь, насколько часто ты статически можешь предугадать, какое конкретно целое число тебе придёт в функцию? :)
>> No.13644 Reply
>>13643
Это ты хорошо сказал
>> No.13645 Reply
>>13635
Дак что это получается, в a -> YobaDictionary a -> a -> Yoba a первое a — фактический тип, YobaDictionary a — словарь, в котором лукапается a -> Yoba a по фактическому типу? Ну и какой магией он тут выведет из контекста определенный тип по инстансу Yobable a, когда он будет только третьим аргуметом? Летчик.жпг.
>> No.13649 Reply
>>13601
Шрифт вроде или DjView Sans, или Droid Sans. Первый в стандартной линуксячьей поставке, второй легко гуглится по "Droid fonts zip".
>> No.13652 Reply
http://hh.ru/vacancy/4800824?query=haskell
я просто оставлю это здесь.
>> No.13653 Reply
>>13652
Что они там мутят интересно, есть инсайдерская инфа?
>> No.13654 Reply
>>13649
Это не они.
>> No.13656 Reply
>>13654
Возможно, Liberation Mono.
>> No.13657 Reply
File: Kasperski_vakansy.jpg
Jpg, 45.30 KB, 353×358
Your censorship settings forbid this file.
r-18
>>13653
> Что они там мутят
Фалломорфные вирусы, очевидно же! Разработают -- а потом будут продавать антивирь к ним.
>> No.13670 Reply
File: 18538e4dca2dcfa2ddf0ef0ed73f38b6.jpg
Jpg, 731.31 KB, 800×1134 - Click the image to expand
edit Find source with google Find source with iqdb
18538e4dca2dcfa2ddf0ef0ed73f38b6.jpg
>>13639
> В простых случаях просто и воспроизводится: hurr durr
Чтож ты не воспроизвел хотя-бы пример из вопроса? Тогда бы понял, что именно так спрашивающий все и понимает - т.е. неправильно. Ведь дальше потребуются неявные касты между "типами", а дальше - приведенный выше вопрос про "промежуточное представление".
> А сложные - нет, но у меня там и написано
Другими словами твоя "интуиция" для TC годится только для воспроизведение ошибки спрашивающего, а для понимания не годится.
> Ну хорошо - для каждого. Перекладывание тега с полки в шухлядку не меняет сути - это сорт динамического петушения.
Типичный результат динамического мышления: провалена попытка отличить жопу от пальца. В этом суть как раз и заключается: в статике кол-во InfoTable зависит от кол-ва типов, и все таблицы известны на этапе конпеляции, в динамике все иначе - число InfoTable в патологическом случае действительно зависит от числа экземпляров - типов-то нет.
> В скриптах этот диспатч - мультиметоды, в хачкеле - паттерн-матчинг.
Ну вот. Опять спутал жопу с пальцем. Мультиметоды диспатчат по типу, а паттерн-матчинг матчит конструкторы одного типа. И АТД - закрыт. Даже если считать, что тип в динамике на самом деле один, а динамические "типы" - это его конструкторы, все равно это не АТД, потому что открытый.
>>13643
В лисподеревеньке может все и так, а в реальном мире у половины хаскелевских типов один конструктор (и у Int в том числе) и известно это на этапе компиляции.
>> No.13671 Reply
File: 364b0965f374d61b2128e096f35a2e9c.jpg
Jpg, 691.78 KB, 515×800 - Click the image to expand
edit Find source with google Find source with iqdb
364b0965f374d61b2128e096f35a2e9c.jpg
>>13645
> YobaDictionary a — словарь, в котором лукапается a -> Yoba a по фактическому типу?
Нет, в словаре ничего не лукапается по типу. Словари содержат функции класса. Сколько имплементаций класса - столько и словарей. Если ты используешь полиморфную функцию в контексте, где известен конкретный тип (например Int) - конпелятор частично применит функцию, подставив соответствующий типу словарь и получит, например, функцию Int -> Yoba Int , в которой используется функция из словаря класса Yobable, имплементированная для Int т.е. toYoba :: Int -> Yoba Int
>> No.13674 Reply
>>13671
Иными словами в качестве значений у словарей функции класса для конкретного инстанса. Во время выполнения конкретный тип выводится все же из контекста.

Внутри любое обращение к функции тайпласса Yobable достает нужную из словаря, окей. В случаях с fromInteger каких-нибудь без контекста, само fromIneteger играет роль обертки над перелопачиванием словаря в поисках нужной функции. Ну все правильно же?

Но зачем после прогонки через Core нужен первый аргумент в
a -> YobaDictionary a -> a -> Yoba a
до сих пор остается загадкой.

И все же сколько мучаю интерпретатор, прихожу к выводу, что в пределах некоторых тайпклассов все же есть какое-нибудь основное представление. Например я пишу такую хрень:
    class Yoba a where
        yoba :: a -> a
        
    instance Yoba Int where
        yoba x = x
Запускаю интерпретатор с yoba 1 и получаю Ambiguous type variable `t' in the constraints. Меняю Int на Integer и yoba 1 возвращает единицу без нареканий. Ну получается, что пока вычисления не нужны, то хаскель сохраняет всякую полиморфную мишуру, а как дело доходит до счета, выбирается конкретный тип в пределах выбранного тайпкласса и пошло счетоводство.

А вобще что-то у меня херово получается в low-level объяснения работы с тайпклассами.
>> No.13676 Reply
File: 1299530558493.jpg
Jpg, 442.99 KB, 894×683 - Click the image to expand
edit Find source with google Find source with iqdb
1299530558493.jpg
>>13674
> Иными словами в качестве значений у словарей функции класса для конкретного инстанса.
Верно.
> Во время выполнения конкретный тип выводится все же из контекста.
Не во время выполнения, во время компиляции. Есть некие расширения системы типов хаскеля, при использовании которых это делается во время выполнения, но об этом в другой раз.
> А вобще что-то у меня херово получается в low-level объяснения работы с тайпклассами.
Ну вот смотри: ты пишешь функцию, вычисляющую сумму элементов списка. У тебя есть разные числовые типы, для которых заданы операции сложения: (+#) :: Int -> Int -> Int (+##) :: Double -> Double -> Double и нули: int0 :: Int double0 :: Double. Ты пишешь для каждого числового типа сумму: sumInt = foldl (+#) int0 ; sumDouble = foldl (+##) double0 - почти одинаковые функции. Хотелось бы, коечно, написать обобщенную функцию, но как? Просто передавать соответствующие операции через параметры: sum (+) v0 = foldl (+) v0 тогда sumInt' = sum (+#) int0; sumDouble' = sum (+##) double0 но это не то что надо - сложение и нуль тесно связаны и зависят от типа. Будем передавать их как один параметр типа type Number a = (a -> a -> a, a):
Обновляем функцию суммы: sum' ((+), v0) = foldl (+) v0 теперь ее тип sum' :: Number a -> [a] -> a Для каждого типа пишем готовый набор функций: doubleImp = ((+##), double0). Теперь сумма для конкретного типа будет выглядеть так: sumDouble'' = sum' doubleImp. В принципе, набор функций однозначно определяется типом на этапе компиляции, так что компилятор мог бы продставлять его неявно и автоматически. Так вот, когда он это делает - получаются классы типов.
> Но зачем после прогонки через Core нужен первый аргумент
Это часть реализации параметрического полиморфизма, но про это тоже как-нибудь в другой раз.
> Запускаю интерпретатор с yoba 1 и получаю Ambiguous type variable `t' in the constraints.
Ну правильно. yoba 1 имеет тип (Yoba a, Num a) => a и это фактически функция с тремя параметрами. Какое значение в них подставлять в данном случае неизвестно.
> Меняю Int на Integer и yoba 1 возвращает единицу без нареканий.
Это все потому, что для удобства работы во всяких интерпретаторах, числовым (не только) классам соответствуют типы по умолчанию. Если тип вывести не удается, то выбирается тип по умолчанию. Целое число по умолчанию - Integer, плавучка - Double. Пока ты не реализовал инстанс Yoba для Integer подставить тип по умолчанию было нельзя. На самом деле дефолтные типы - это грабли, и если ты включишь в интерпретаторе ворнинги :set -Wall то получишь для своего "работающего" yoba 1 соответствующее предупреждение Warning: Defaulting the following constraint(s) to type Integer. Но для интерпретатора удобно - там еще и не такая акробатика задействована.
>> No.13677 Reply
>>13676
Уау. Спасибо, я все понял, кажется. По твоим объяснениям выходит, что чистый 0 — это функция от одного аргумента — словаря инстанса конкретного тайпкласса. Таким образом, 0 выводится компилятором в соответсвии с конкретным типом (который является инстансом Num). Представление, выходит не меняется, так как нормальный порядок вычислений и все такое: конкретное представление будет выведенно на этапе компеляции.

Но все равно с различными представлениями в хацкеле сложновато, допустим примитивный пример со множествами без всяких append и contains.
    class YobaSet a where
        intersect :: Eq b => a b -> a b -> a b
И очевидное:
    instance YobaSet [] where
        intersect xs ys = filter (flip elem ys) xs
Ну ок, а теперь я хочу себе упорядоченное множетсво, так как в нем пересечение O(n + m), а не O(nm). И тут сталкиваюсь с такой хернёй: intersect работает только для множеств типов Eq a => a, для упорядоченных кеннот гет Ord a => a фром контекст. Добавлю ограничение (Eq b, Ord b) в функцию тайпкласса — останусь без неупорядоченных множеств (например комплексные числа не имеют инстанса Ord). Когда захочу попрыгать на типах, напишу fromList в тайпкласс, но там возникнет та же проблема.

Короче заканчиваю свои последние 100 страниц HSoE и лезу в викикнигу и, возможно, в Симона Томпсона. Таких непонятных вещей с прочтением становится все больше и больше.
>> No.13685 Reply
>>11962
Удобно перейти с ruby на haskell http://www.haskell.org/haskellwiki/Web/Frameworks#Haskell_on_a_Horse
>> No.13689 Reply
File: 1315711915100.png
Png, 1.22 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1315711915100.png
>>13685
> 500 - Internal Server Error
SOSNOOLEY ТАК SOSNOOLEY
>> No.13719 Reply
File: 1218997974327.png
Png, 81.55 KB, 484×479 - Click the image to expand
edit Find source with google Find source with iqdb
1218997974327.png
Начал пробовать hmatrix. Появилось несколько вопросов.
1) Допустим, есть матрица
> disp $ (4><5) [1..]
4x5
 1   2   3   4   5
 6   7   8   9  10
11  12  13  14  15
16  17  18  19  20
Как определить функцию, заменяющую все ненулевые элементы матрицы типа Matrix Double на 1?

2) Как определить функцию, которая возвращает истину, если для двух матриц A и B найдётся такая C, что A == B <> C? Затруднение вызывает сам процесс перебора матриц С до первой подходящей.
>> No.13720 Reply
>>13719
Да, оператор <> в вопросе 2) лишь для примера. Пускай там будет какая-то хитрая функция f(B,C), чтобы вас не смущала возможность умножения на обратную етц.
>> No.13856 Reply
Помню, когда-то обсуждали хачке-аддоны для вижал-студии и кто-то даже хотел чёто своё писать. Расскажите, как у вас дела продвинулись, осилил ли кто хотя-бы токенизатор/аст? Сейчас в гугле я вижу, что есть древнее заброшенное нерабочее говнецо, есть закрытый япошко-проект, который автор пилит раз в два месяца и стесняется показывать и есть scion, который нихуя особо не умеет и конпелирует в фоне для отлова ошибок (это вообще пушка, блядь).
>> No.13859 Reply
File: Busty_Cirno_render_by_InverseEcho[1].png
Png, 463.56 KB, 737×880 - Click the image to expand
edit Find source with google Find source with iqdb
Busty_Cirno_render_by_InverseEcho[1].png
>> No.13861 Reply
>>13859
> For the second part of the question: Have a look at the Scala programming language which has successfully combined reified generics from the underlying JVM with higher kinded types.
false. Скалка стрипает всё, что можно, а всякие продвинутые штуки она эмулирует через рефлексию и кодогенерацию. Кстати, с каких это пор в JVM появились генерики, вроде всю жизнь там всё работало через [s]жопу[/s] type erasure?
>> No.13862 Reply
>>13856
> Помню, когда-то обсуждали хачке-аддоны для вижал-студии и кто-то даже хотел чёто своё писать.
Я постил фейковые скриншоты два года назад. Чисто для лулзов. Писать плагин для VS может слегка подзаебать - слишком большой объем работы.
> осилил ли кто хотя-бы токенизатор/аст
Самодельный токенизатор/аст - это вообще пушка, блядь. Потому что его придётся апдейтись с каждым изменением компилятора, а они бывают часто - язык-то экспериментальный.
> есть scion, который нихуя особо не умеет и конпелирует в фоне для отлова ошибок
А как ты предлагаешь отлавливать ошибки?
>> No.13863 Reply
>>13859
Читал я как-то годную фэнтезю — Бэккера, "Князь пустоты". Там есть сцена поединка магов.
Клан первого из них, "Завет" — владел магией высших порядков, хотя всегда жил крайне скромно. Другой маг был большим человеком в самом богатом магическом клане "Багряных Шпилей" — но вот беда, никто, кроме Завета, высшей магией не владел. Все прочие кланы строили свою карьеру на заклинаниях, подобранных наугад, Завет же владел теорией.

Маг Шпилей вызвал самого сильного духа, какого мог, своими эмпирически подобранными заклятиями (сильнейшими в клане, заметьте). И до смерти удивился, когда полуживой маг Завета с помощью заклинаний-Абстракций (они и правда так назывались!), без усилий размазал духа и соперника тонким слоем по окрестностям.

Примерно таким же тонким слоем чувствовали себя мы перед чемпионами, потому что:
надо было овладеть новым, "магическим" языком;
он почти что так и назывался - только слово Magic заменили словом Lambda;
мы тыкались в темноте, оттачивая комбинации наших примитивных эмпирических "заклинаний";
те, кто освоил теорию, в мгновение ока (от 200 до 900 ходов) выносили "в ноль" наш тщательно, вручную подобранный раш.
Не отпускало нас потом ещё два дня.

Четыре японских хаскеллиста:
собирали части пушки в разных словах (потом оказалось, что иначе в этом SKI-исчислении никак);
авто-компилировали все стратегии;
умели, если им что-то сломали, оживлять ячейку и продолжать любую (!) старую стратегию с того места, на которое возможно откатиться (!!!), и собирали подходящие запчасти по разным слотам (!);
У меня самовосстанавливаться умеют только две очень частных стратегии - dec() слабой ячейке врага, и revive() своей.
ещё они написали свой тестовый-контестовый сервер — от нечего делать, надо полагать.
эти монстры научились убивать "sitting duck" в 165 ходов.

Вот у меня недавно dima_kender спрашивал старый вопрос — какой язык программирования лучше для быстрой разработки :D

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

И дал свои предварительные ответы, при прочих равных:
Для веба — Rails, для десктопа — Windows.Forms.

Но если программисты и задача пыц-пыц какие умные, то Haskell, как показали последние дни.

http://singalen.livejournal.com/234472.html
>> No.13873 Reply
>>13862
> его придётся апдейтись с каждым изменением компилятора, а они бывают часто - язык-то экспериментальный.
Scion джва года не апдейтили. Изменений в синтаксисе и лексике немного, на самом-то деле. Вроде бы даже с haskell98 ничего не менялось. Только икстеншоны всякие.
> А как ты предлагаешь отлавливать ошибки?
Наверное, писать свой тайпчекер, раз уж ghc-api не предусматривает такой возможности.
Вообще, плохо же становится, когда представляешь проект 500к loc, компилирируемый в фоне для интеллисенса.
Нажал ctrl+space - и всё - приходи послезавтра.
Кстати, всё это можно завернуть в какую-нибудь либу, которую кто-нибудь сможет заюзать, когда надумает писать дудкоконпелятор.
>> No.13880 Reply
> Вроде бы даже с haskell98 ничего не менялось.
Хотя нет, таки менялось, но немного. n+k паттерны убрали, и слегка отрефакторили грамматику.
>> No.13883 Reply
>>13873
> Наверное, писать свой тайпчекер, раз уж ghc-api не предусматривает такой возможности.
Ога: порсер, тайпчекер (он, кстати, буквально недавно менялся), еще надо уметь загружать пакеты. Чуть ли не половину GHC придется написать. Слишком дохуя работы. А если ты это еще и на дудке надумаешь писать - то вообще смерть.
>> No.13885 Reply
>>13883
Ну лексер/парсер не так уж и сложно - не с++ парсить всё-таки. Мешок размеченных объединений + fslex/fsyacc. Вот насчёт тайпчека не знаю, http://research.microsoft.com/~simonpj/papers/constraints/jfp-outsidein.pdf и правда выглядит хардкорно.
> еще надо уметь загружать пакеты
Конкретно загружать - через cabal. Вот парсить сигнатуры - да, еще работы.
А еще надо hoogle встроенный, тайп-инференс для выделенной части выражения с показом типа в тултипе и т.д.
>> No.13886 Reply
>>13885
> Мешок размеченных объединений + fslex/fsyacc.
Пробовал им когда-нибудь синтаксис на отступах парсить?
>> No.13889 Reply
>>13886
Считать пробелы в начале строк довольно. У хаскеля никаких двусмысленных выражений нет. Это тебе не only perl can parse perl.
>> No.13892 Reply
Как-раз дошел до этого места в рипорте. Оказывается, хачкелейаут вообще в грамматику не входит, а делается простым препроцессингом, расставляющим ;,{,}.
>> No.13893 Reply
>>13863
Очень любопытно, хотя весь текст сюда копировать было не обязательно. Хочется узнать поподробней. Может, кто в курсе что это за контест, поясните, что вообще за байда там творилась и что значат все эти восторженные
> убивать "sitting duck" в 165 ходов
>> No.13897 Reply
File: card_S[1].png
Png, 364.93 KB, 400×556 - Click the image to expand
edit Find source with google Find source with iqdb
card_S[1].png
>> No.13898 Reply
>>13892
А, ну тогда да.
>> No.13910 Reply
>>13897
Вдогонку:
http://users.livejournal.com/_adept_/tag/icfpc
Особенно соревнования за 2006 и 2007 годы.
>> No.13993 Reply
>>11962
Няши, скажите, а вики-учебник насколько нормален, чтобы учить по нему хаскелл. Не для реального использования, конечно, а чисто для умственной разрядки.
http://en.wikibooks.org/wiki/Haskell/Variables_and_functions
>> No.14049 Reply
душкин совсем ебанулся, смотрите чё пишет: http://knol.google.com/k/парижский-клуб#
>> No.14050 Reply
>>14049
Ну и нахуя здесь эта политота с мыслями о руССком народе?
>> No.14072 Reply
File: 0b64deb0613a0a84b9b21d6f1a728da9.jpg
Jpg, 136.85 KB, 700×750 - Click the image to expand
edit Find source with google Find source with iqdb
0b64deb0613a0a84b9b21d6f1a728da9.jpg
http://www.icfpcontest.org/2011/09/results.html
> atomic $ save Madoka
Они, конечно, имели в виду atomically $ save Madoka.
>> No.14178 Reply
Кишки последней вижул-студии - это штота, посоны.
Если кто-нибудь вдруг знает какие-нибудь диссеры / статьи на тему модели обработки текста, реализованной в vs, поделитесь, пожалуйста.
>> No.14179 Reply
File: IMG_8002.JPG
Jpg, 2103.43 KB, 2816×2112 - Click the image to expand
edit Find source with google Find source with iqdb
IMG_8002.JPG
Я уже даже зарисовывать это добро начал, чтобы хоть чуточку приблизиться к пониманию творящихся там йобаморфизмов.
>> No.14241 Reply
>>14240
http://dobrochan.ru/help/wakabamark
См. "Мультистрочный код"
>> No.14242 Reply
>>14241
Мод-тня, ты? >>14240 удалён или ты его сделала невидимым?
>> No.14243 Reply
Ребята, зачем так жить?
data Foo = Foo { bar :: String
               , baz :: Int }

*Main> :t Foo ""
Foo "" :: Int -> Foo
Замечательно, смотрим дальше:
*Main> :t Foo { bar = "c" }
Foo { bar = "c" } :: Foo
Откуда вдруг взялся Foo, когда по идее должен быть Int -> Foo? Вместе со своим эксепшном в рантайме при попытке сделать baz $ Foo { bar = "c" }.
>>14241
Спасибо.
>> No.14244 Reply
>>14242
Нет, я сам его удалил.
>> No.14245 Reply
>>14243
Это просто синтаксические соглашения.
В этом месте: data ... = Foo { ..
ты объявил конструктор Foo :: String -> Int -> Foo
Foo { [<name> = <value>]* } - синтаксис инициализации структур.
Вот возможность непроинициализировать поля - это плохо, да.
>> No.14246 Reply
>> No.14247 Reply
>>14245
> В этом месте: data ... = Foo { ..
> ты объявил конструктор Foo :: String -> Int -> Foo
Я заметил. Вот теперь и спрашиваю: когда это я успел объявить такой конструктор, проинициализировав всего одно поле?
Всегда можно написать бойлерплейт вроде
data Foo = Foo String Int

bar (Foo x _) = x
baz (Foo _ y) = y

bar_ x = Foo x
baz_ x = flip Foo $ x
И пользоваться им без неожиданностей. Почему этот сахарок с инициализацией структур не делает примерно то же самое?
>> No.14250 Reply
>>14247
Потому что сахарок хочет избавить от обязательной инициализации полей вручную для особо петушиных случаев.
Foo { bar = "c" } эквивалентно Foo { bar = "c", baz = undefined }, а с bar_ x = Foo x ты получил свой Int -> Foo, который в сахарке инициализации будет выглядеть так: \x -> Foo { bar = "c", baz = x }
А вообще, компилятор предупреждает же:
Warning: Fields of `Foo' not initialised: baz
In the second argument of `($)', namely `Foo {bar = "sdf"}'
>> No.14369 Reply
>>13100
Ты слишком пизданулся, няша
>> No.14482 Reply
Кто-нибудь когда-нибудь разбирался с парсеком? Его вообще можно помемоизировать? Первичное гугление из результатов дало только статейку в fprog.ru про какой-то паркат, но этого мало.

А то написал на нем парсер чуть сложнее калькулятора, так он на 4Кб специально сформированного текста начинает есть 140Мб (хорошо, что зависимость вроде бы линейная).
>> No.14485 Reply
>>14482
Packrat, няша, packrat. Мемоизирующая реализация рекурсивно-спускового парсера с откатами, каковым и является Парсек (да и вообще все комбинаторные парсеры, ИМХО). Оптимизация по времени за счет памяти. То есть, считай, никакой оптимизации. Есть какие-то хитрые реализации, мемоизирующие только особо горячие места, но они сейчас на стадии академических исследований.

Кстати, судя по тому, как активно твой парсер жрет память, он у тебя как раз мемоизирующий. Канонический рекурсивный спуск с откатами имеет O(1) по памяти. Ну, знающие куны тебе точно скажут.
>> No.14487 Reply
>>14485
> у тебя как раз мемоизирующий
Он у меня рекурсирующий, причем глубина рекурсии O(n) (фактически это вообще лексер -- на выходе получается список, хоть и очень хитрых лексем). Использование many приводит к ругани парсека на "Text.ParserCombinators.Parsec.Prim.many: combinator 'many' is applied to a parser that accepts an empty string.", хотя many конечно справляется лучше. many $ char 'x' жрет уже меньше O(n), хотя все равно много --- на мегабайте исходника выдает 330мб (мой парсер ест 700Мб).

Залез в исходники парсерка, чтобы посмотреть на many и manyAccum, а там такая содомия, что даже и непонятно какая: то ли лямбдо-, то ли монадо-. Пойду лучше пару супов слеплю.
>> No.14488 Reply
>>14487
С many разобрался, проблема пока исчерпана.
>> No.14489 Reply
>>14487
Лол, даже я знаю, как сделать работоспособный many(empty_string) и many(many(...)).
>> No.14490 Reply
>>14489
ну-ка, поведай, как автоматически разрулить левую рекурсию.
>> No.14492 Reply
>>14490
Устранение непосредственной левой рекурсии
A->Aα1|Aα2|...|Aαn|β1|β2|...|βm
A->β1A'|β2A'|...|βmA'
A'->α1A'|α2A'|...|αn|ε
Алгоритм устранения левой рекурсии, которая не является непосредственной рекурсией (гарантированно работает с грамматикой, не имеющей циклов и ε-правил).
1. Расположить все элементы грамматики в определённом порядке A1, A2,..., An.
2.for i=1 to n do begin
for j=1 to i-1 do begin
Заменить каждое правило вида
Ai->Ajα правилом
Ai->δ1α|δ2α|...|δkα,
где Aj->δ1|δ2|...|δk.
end
Устранить НЛР для Ai
end
>> No.14513 Reply
>>14490
Э-э-э... Я не про левую рекурсию. Я конкретно про эти выражения. Разруливаются они просто - если выражение под many(...) поглотило 0 символов, то из many(...) можно выходить. Причем вполне законно.
>> No.15348 Reply
Задача:
http://projecteuler.net/problem=4

Решение:
module Main where

loop 99 _ acc = acc
loop i 99 acc = loop (i - 1) 999 acc
loop i j acc = loop i (j - 1) (max acc p)
               where
                  p = case s == reverse s of
                          True  -> i * j
                          False -> acc
                  s = show (i * j)

main = do
    putStrLn (show (loop 999 999 0))

"Результат" выполнения:
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
>> No.15349 Reply
>>15348
Аналогичный код на телебэйсике, кстати, работает как положено:
-module(palindrome).
-export([main/0]).


loop(99, _, Acc) -> Acc;
loop(I, 99, Acc) -> loop(I - 1, 999, Acc);
loop(I, J, Acc) -> 
    S = integer_to_list(I * J),
    P = case S == lists:reverse(S) of
        true  -> I * J;
        false -> Acc
    end,
    loop(I, J - 1, max(P, Acc)).

main() -> loop(999, 999, 0).
Результат:
1> c(palindrome).
{ok,palindrome}
2> palindrome:main().
906609
>> No.15350 Reply
File: 938337fa92a43c8c7aa73cba29265af6.jpg
Jpg, 160.37 KB, 450×600 - Click the image to expand
edit Find source with google Find source with iqdb
938337fa92a43c8c7aa73cba29265af6.jpg
>>15348
1) TCO тут не при чем. Стек переполнился санками 999 - 1 - 1 - 1 ...
2) Если нужна оптимизация - компилируй с оптимизацией и все будет работать.
>> No.15351 Reply
>>15348
Можно и без оптимизации, если добавить strict evaluation с помощью seq.
>> No.15352 Reply
File: 1298738167269(1).jpg
Jpg, 15.07 KB, 204×279 - Click the image to expand
edit Find source with google Find source with iqdb
1298738167269(1).jpg
>>15351
Ну и зачем вручную строгость аннотировать, если можно просто оптимизацию включить?
>> No.15353 Reply
>>15352
скомпилировал так
ghc -O2 -o palindrome Palindrome.hs

Работает. Но как-то это does not feel right. Ведь включение оптимизации, как я подозреваю, не превращает Хаскель в энергичный язык, верно? Т.е. код стал работать благодаря какой-то тёмной магии, которую я не могу контроллировать и мне по существу приходится полагаться на удачу.

Как seq использовать я не понял. Проставил везде $!, чтобы все аргументы вычислялись сразу и скомпилировал без оптимизаций - работает, но получается какая-то нечитаемая хуйня:
loop i j acc = ((loop $! i) $! (j - 1)) $! (max acc p)
...
Вероятно, I am doing it wrong - поясните как надо.
>> No.15356 Reply
File: 1298714346252.jpg
Jpg, 355.46 KB, 600×800 - Click the image to expand
edit Find source with google Find source with iqdb
1298714346252.jpg
>>15353
> Ведь включение оптимизации, как я подозреваю, не превращает Хаскель в энергичный язык, верно?
Можешь считать, что превращает. Это называется анализ строгости.
> Т.е. код стал работать благодаря какой-то тёмной магии, которую я не могу контроллировать и мне по существу приходится полагаться на удачу.
Никакой темной магии тут нет. Контролируется все типами. В данном случае ты используешь целые числа. Ленивость операций над целыми числами никакого смысла не имеет, поэтому они выполняются энергично. Анализатор строгости оставляет ленивость там, где она смысл имеет.

Но если тебе не хочется полагаться на анализатор строгости (в данном случае, как я сказал, для этого нет причин) можешь ее проаннотировать. Для этого, впрочем, нужно понимать где она нужна.
> Проставил везде $!
Ставить это везде не нужно. Санки не влезающие в стек накапливаются там, что очевидно в общем-то, где их накапливают. Поэтому аннотировать строгость нужно для аккумулятора. Так:
loop 99 _ acc = acc
loop i 99 acc = loop (i - 1) 999 $! acc
loop i j acc = loop i (j - 1) $! (max p acc)
       where
          p = case s == reverse s of
                  True  -> i * j
                  False -> acc
          s = show (i * j)
   main = print $ loop 999 999 0

Или так:


   {-# LANGUAGE BangPatterns #-}

   loop 99 _ !acc = acc
   loop i 99 !acc = loop (i - 1) 999 acc
   loop i j !acc = loop i (j - 1) (max acc p)
       where
          p = case s == reverse s of
                  True  -> i * j
                  False -> acc
          s = show (i * j)
   main = print $ loop 999 999 0

Но в любом случае, компилировать хаскель без оптимизации - плохая идея.
>> No.15357 Reply
>>15352
Очевидно, чтобы не сесть в лужу в таких случаях, скажем, до компиляции.
>> No.15359 Reply
>>15357
Ну а ты не садись в лужу, а компилируй.
>> No.15364 Reply
>>15356
> Ленивость операций над целыми числами никакого смысла не имеет, поэтому они выполняются энергично.
Пожалуй, это единственная оптимизация, в которую хаски может самостоятельно, потому што уже на таком примере он падает:

[code]
module Main whereр,

data Yoba = Yoba Integer deriving Show

main = do
putStrLn $ show $ foldl (\a b -> a + b) 0 [0..1000000]
putStrLn $ show $ foldl (\(Yoba a) b -> Yoba (a + b)) (Yoba 0) [0..1000000]
[/code]

Есть подозрение, что в общем случае задача о строгости неразрешима, и достаточно умный конпелятор не удастся создать никогда. Человек делает это лучше, чем машина.
>> No.15365 Reply
>>15364
Опять таки, лечится довольно просто:
data Yoba = Yoba !Integer deriving Show
Кстати, проверил бы на newtype, там такой хуйни не должно возникать.
>> No.15366 Reply
File: 1298827473077.jpg
Jpg, 379.29 KB, 849×1217 - Click the image to expand
edit Find source with google Find source with iqdb
1298827473077.jpg
>>15364
> потому што уже на таком примере он падает:
Ну и правильно делает, что падает. Потому что для алгебраического типа ленивость "полей" имеет смысл. Возьми, например, список - для конс-пары имеет смысл операция форсирующая только голову - head и операция, которая форсирует все хвосты, а само содержимое списка не вычисляет - length. Воспринимай конструктор с параметром как явную декларацию ленивости. Если же ты хочешь создать конструктор со строгими параметрами - строгими их и описывай (либо используй newtype в случае одного поля). Именно это под "ленивость управляется типами" я и подразумевал.
>> No.15430 Reply
File: 1277655410446.gif
Gif, 8.09 KB, 430×304 - Click the image to expand
edit Find source with google Find source with iqdb
1277655410446.gif
>>15365
Поздравляю, теперь при паттерн матчинге ты будешь явно вычислять аргумент конструктора, а если там трехэтажная шипастая дилда? Нельзя было просто деконструкцию энергичной сделать?
>> No.15435 Reply
File: 1298815425629.jpg
Jpg, 63.03 KB, 640×1080 - Click the image to expand
edit Find source with google Find source with iqdb
1298815425629.jpg
>>15430
> Поздравляю, теперь при паттерн матчинге ты будешь явно вычислять аргумент конструктора
Наоборот, не при матчинге, а при применении конструктора к аргументу.
> а если там трехэтажная шипастая дилда?
Ты в своем уме? Какая еще дилда? Ты может боишься, что там жопа? Нет, в поле !Integer может быть только Integer, по причине указанной выше.
>> No.15467 Reply
>>15435
Согласен, фигню сказал, я имел ввиду что к моменту матчинга значение уже и так будет вычислено, а мне, например, хочется в каком-нибудь случае оставить все ленивым. Просто по-моему логичнее форсить вычисления именно при матчинге. Собственно, вот http://hpaste.org/54476. Кстати, почему там не может быть жопы-то?
>> No.15547 Reply
Хаскебоги, объясните как это работает.
> let fibs = 1 : 2 : zipWith (+) fibs (tail fibs)
>> No.15548 Reply
>>15547
МАГИЯ
>> No.15549 Reply
>>15548
Не, ну серьёзно.
>> No.15551 Reply
>>15549
Корекурсия же. Почитай HSOE, если интересно, подробно описанно.
>> No.15552 Reply
>>15551
Спасибо. По запросу "haskell corecursion" гугль выдает разбор именно этого примера на stackoverflow
http://stackoverflow.com/questions/6186664/corecursion-and-codata
>> No.15763 Reply
Почему лямбды не могут быть point-free? Почему (\x -> x + 1) не point-free, а (1 +) point-free?
>> No.15764 Reply
Почему K-комбинатор не может быть выражен в виде point-free выражения?
pl (\(x,_,_) -> x)
(line 1, column 8):
unexpected "_"
ambiguous use of a non associative operator
>> No.15765 Reply
File: 24015a8220cb2b8e01c0a514fba1efa2.jpg
Jpg, 777.66 KB, 922×880 - Click the image to expand
edit Find source with google Find source with iqdb
24015a8220cb2b8e01c0a514fba1efa2.jpg
>>15763
Потому что гладиолус.
>>15764
Ты написал что-то странное, но открою тебе секрет: интерфейсные ф-ии класса Applicative - это и есть SK-базис.
>> No.15795 Reply
>>12303
Поставил ghc-7.0.3 и hp-2011.2.0.1
Скачал euterpea и пытаюсь использовать описанный на багтрэкере work-around
http://hackage.haskell.org/trac/ghc/ticket/5022#comment:9

Но что-то нифига не срастается
$ cabal configure --disable-optimization
Resolving dependencies...

ArrowWrap.hs:5:8:
    Could not find module `Language.Haskell.Exts':
      Use -v to see a list of the files searched for.
Эти самые расширения как-то cabal'ом доставлять надо или что?
И как их поставить? Как узнать какой нужен пакет?
Надеюсь на вашу помощь.
>> No.15797 Reply
Запиливаю пошаговое руководство для того, чтобы заставить работать Euterpea на Ubuntu GNU/Linux

1) Удаляем ghc6 и haskell-platform из реп, если они установлены.

2)Качаем ghc-7.0.3
http://haskell.org/ghc/dist/7.0.3/ghc-7.0.3-i386-unknown-linux.tar.bz2
и haskell-platform-2011.2.0.1
http://lambda.galois.com/hp-tmp/2011.2.0.1/haskell-platform-2011.2.0.1.tar.gz
3) устанавливаем из реп след пакеты
sudo apt-get install libgmp3-dev libasound2-dev libxrandr2 libxrandr-dev
4) Я лично предпочитаю ставить пакеты не из реп в домашнюю папку. Поэтому создаём соответсвующие папки
mkdir -p ~/sw/haskell/{ghc-7.0.3,hp-2011.2.0.1}
В .bashrc сразу прописываем
export PATH=~/sw/haskell/ghc-7.0.3/bin/:$PATH
export PATH=~/sw/haskell/hp-2011.2.0.1/bin/:$PATH
export PATH=~/.cabal/bin/:$PATH
Закрываем терминал. Открываем терминал.

5) распаковываем архив с ghc и делаем
./configure --prefix=/home/username/sw/haskell/ghc-7.0.3/
make install
6) распаковываем платформу и делаем
./configure --prefix=/home/username/sw/haskell/hp-2011.2.0.1/
make
make install
7) Ставим зависимости
cabal update
cabal install darcs --flags="http -curl"
cabal install haskell-src-exts
cabal install PortMidi
cabal install CCA
cabal install GLFW
cabal install markov-chain
cabal install HCodecs-0.2
cabal install heap-0.6.0
8) Ставим непосредственно Euterpea
darcs get http://code.haskell.org/Euterpea
cd Euterpea
cabal configure --disable-optimization
cabal install
Должно собраться без ошибок

9)тестируем
cd example
В файле ChildSong6.lhs на 24 строке меняем
> times (n+1) m = m :+: (times n m)
на
> times n m = m :+: (times (n-1) m)
(Иначе почему-то не работает. В 7-ом GHC больше нельзя, что ли, так писать?)

стартуем ghci:
Prelude> :l ChildSong6
...
*ChildSong6> test childSong6
В текущей папке должен появиться файл test.mid
Можно его проиграть командой
timidity test.mid

Вроде ничего не забыл.
>> No.15820 Reply
File: 13222307765635.jpg
Jpg, 44.87 KB, 450×530 - Click the image to expand
edit Find source with google Find source with iqdb
13222307765635.jpg
>>15797
Можно, только нужно указать соответствующее расширение: NPlusKPatterns
>> No.15838 Reply
Говно расширение. Вот если бы оно работало с классом обратимых функций,
и если бы в хачкеле была полноценная унификация вместо паттерн-матчинга, тогда было бы ок.
>> No.15841 Reply
>>15838
> полноценная унификация
Штоэтааа?
Мимокрокодил, случайно заинтересовался
>> No.15876 Reply
File: 13228831893237.jpg
Jpg, 24.04 KB, 373×309 - Click the image to expand
edit Find source with google Find source with iqdb
13228831893237.jpg
>>15841
Обычный процесс поиска подстановок для пар термов.
>>15838
> полноценная унификация
Но ведь с деконструкцией все тупо и довольно быстро, а с такой-то унификацией язык будет таким же медленным говном как пролог.
> обратимых функций
Сложение в группе обратимо ороро
>> No.15879 Reply
File: fufufu.png
Png, 9.46 KB, 958×121 - Click the image to expand
edit Find source with google Find source with iqdb
fufufu.png
Посоны, кому-нибудь удавалось завести под вендовым ghci cmath?
Описанные ональные трюки не работают: http://hackage.haskell.org/trac/ghc/ticket/3242
, чинить планируют через пару лет, лол.
>> No.15924 Reply
А можно как-нибудь curry и uncurry обобщить так, чтобы они работали с кортежами произвольной длины, а не только с парами.

Например, удобно было бы, если бы можно было так писать.
-- return a note given pitch, volume 
-- and duration triple
pvd2note (_, 0, d) = rest d
pvd2note (p, v, d) = vol v (p d)

-- return a function that converts a pair of volume and duration to a note 
-- with predefined pitch p
vd2note p = uncurry ((curry pvd2note) p)

-- return a function that converts duration to a note with 
-- predefined pitch p and volume v
d2note p v = (curry (vd2note p)) v
>> No.15925 Reply
File: 04ba0851259da37922853ef4db237a26.png
Png, 391.29 KB, 800×1148 - Click the image to expand
edit Find source with google Find source with iqdb
04ba0851259da37922853ef4db237a26.png
>>15924
В контексте жалкого подобия лямбда-омеги, которое мы имеем в хаски привет, type families сегодня, это попросту невозможно. Для таких трюков нужны полноценные зависимые типы.
>> No.15927 Reply
File: капитан.jpg
Jpg, 144.74 KB, 640×512 - Click the image to expand
edit Find source with google Find source with iqdb
капитан.jpg
>>15925
> с кортежами произвольной длины
А мне сама идея не нравится. И вообще не нравится понятие "кортеж произвольной длины". Какоу в конце-концов у него тип? Кортеж он и должен быть кортежем - чем-то захардкоженным и тупым.
>> No.15939 Reply
File: c027c61843241c5f3002e7375ff70b7e.png
Png, 1478.32 KB, 963×1363 - Click the image to expand
edit Find source with google Find source with iqdb
c027c61843241c5f3002e7375ff70b7e.png
>>15927
Воспринимай их как эдакие гетерогенные списки, параметризованные чиселкой.
>> No.16262 Reply
File: image_lepro_thumbnail.jpeg
Jpeg, 44.51 KB, 450×304 - Click the image to expand
edit Find source with google Find source with iqdb
image_lepro_thumbnail.jpeg
Задача - получить значение поля "website_url" из содержимого следующей страницы: http://api.stackoverflow.com/1.1/users/1

Содержимое страницы получается следующим образом:
liftM decompress $ ( curlGetString_ ("http://api.stackoverflow.com/1.1/users/" ++ (show userId)) [] >>= return . snd) В итоге имеем:
Chunk "{\r\n  \"total\": 1,\r\n  \"page\": 1,\r\n  \"pagesize\": 30,\r\n  \"users\": [\r\n    {\r\n      \"user_id\": 1,\r\n      \"user_type\": \"moderator\",\r\n      \"creation_date\": 1217514151,\r\n      \"display_name\": \"Jeff Atwood\",\r\n      \"reputation\": 17400,\r\n      \"email_hash\": \"51d623f33f8b83095db84ff35e15dbe8\",\r\n      \"age\": 41,\r\n      \"last_access_date\": 1324990733,\r\n      \"website_url\": \"http://www.codinghorror.com/blog/\",\r\n      \"location\": \"El Cerrito, CA\",\r\n      \"about_me\": \"<p><img src=\\\"http://img377.imageshack.us/img377/4074/wargames1xr6.jpg\\\" width=\\\"250\\\"></p>\\n\\n<p><a href=\\\"http://www.codinghorror.com/blog/archives/001169.html\\\" rel=\\\"nofollow\\\">Stack Overflow Valued Associate #00001</a></p>\\n\\n<p>Wondering how our software development process works? <a href=\\\"http://www.youtube.com/watch?v=08xQLGWTSag\\\" rel=\\\"nofollow\\\">Take a look!</a></p>\\n\\n<p>Find me <a href=\\\"http://twitter.com/codinghorror\\\" rel=\\\"nofollow\\\">on twitter</a>, or <a href=\\\"http://www.codinghorror.com/blog\\\" rel=\\\"nofollow\\\">read my blog</a>. Don't say I didn't warn you <em>because I totally did</em>.</p>\\n\",\r\n      \"question_count\": 15,\r\n      \"answer_count\": 149,\r\n      \"view_count\": 60361,\r\n      \"up_vote_count\": 2636,\r\n      \"down_vote_count\": 549,\r\n      \"accept_rate\": 100,\r\n      \"association_id\": \"febfb878-3f6f-4215-9323-46d15d62ac7d\",\r\n      \"user_questions_url\": \"/users/1/questions\",\r\n      \"user_answers_url\": \"/users/1/answers\",\r\n      \"user_favorites_url\": \"/users/1/favorites\",\r\n      \"user_tags_url\": \"/users/1/tags\",\r\n      \"user_badges_url\": \"/users/1/badges\",\r\n      \"user_timeline_url\": \"/users/1/timeline\",\r\n      \"user_mentioned_url\": \"/users/1/mentioned\",\r\n      \"user_comments_url\": \"/users/1/comments\",\r\n      \"user_reputation_url\": \"/users/1/reputation\",\r\n      \"badge_counts\": {\r\n        \"gold\": 24,\r\n        \"silver\": 81,\r\n        \"bronze\": 96\r\n      }\r\n    }\r\n  ]\r\n}\n" Empty
it :: Data.ByteString.Lazy.ByteString
1) Как составить JSON объект из этого всего и получить содержимое поля "website_url", то есть "http://www.codinghorror.com/blog/"?
2) Как не используя JSON по регулярному выражению (?<="website_url":)([^ ]*) получить аналогичный результат?
>> No.16292 Reply
Купить Барби Программиста своей дочке - значит, подарить ей море радости и незабываемых эмоций сравнимых только с изучением языка Хаскель.

http://www.my-barbie.ru/c/3/p/8/
>> No.16461 Reply
File: Screenshot at 201...
Png, 231.38 KB, 1366×744
edit Find source with google Find source with iqdb
Screenshot at 2012-01-07 04:01:31.png
File: 300px-DIT-FFT-but...
Png, 20.78 KB, 300×244
edit Find source with google Find source with iqdb
300px-DIT-FFT-butterfly.png

Это опять я со своим убогим кодом. На этот раз напрограммировал FFT. Целями были попытки сделать красиво и такая композиция, чтобы знакомый мне термин "бабочка фурье" нашел отражение в коде. В процессе еще захотелось сделать бабочку на векторных операциях. За это и за мой глупый оператор (>|<) с миллиардами реверсов наверное и поплатился производительностью.

Собственно вопросы следующие:
1) Встречался ли кто-нибудь со стандартным аналогом оператора (>|<) ? Он разбивает список на четные и нечетные элементы.
2) Как можно удобно работать с пакетом vector? То есть, можно ли матчить пустой вектор или вектор только с 1 элементом (как у меня в первых двух паттернах nfft)?
>> No.16464 Reply
>>16292
> Покупают вместе: Журнал "Практика функционального программирования"
>> No.16475 Reply
>>16461
http://hpaste.org/56179
Что для Sequence, что для Vector функция partition почему-то не имеет аналогов, учитывающих индекс, поэтому все-таки пришлось навелосипедить свою. В Vector есть какой-то йоба-unstablePartition, который якобы быстрее. Сейчас попробую покопаться в кишках либы и заставить его сожрать индекс можно, конечно, просто зипнуть с [1..], но так ведь неинтересно. И осиль наконец zipWith а то больно смотреть на твои (+:)
>> No.16484 Reply
File: remedy.png
Png, 6.53 KB, 243×92
edit Find source with google Find source with iqdb
remedy.png
File: lsurf.png
Png, 32.37 KB, 600×600
edit Find source with google Find source with iqdb
lsurf.png

>>16475
Спасибо, адаптировал функцию но профита от нее мало. Надо весь nfft переводить на последовательности или вектора, тогда может что-то хорошее и будет. Или вообще с помощью состояния закодировать inplace алгоритм.

А я в самих алгоритмах копаюсь. Откопал алгоритм PFA FFT, основанный простых числах, который обходится без коэффициентов вращения, но весь фак в том, что если ему подсунуть вектор, длина которого простое число - он выродится в ДПФ (насколько я понял). Есть еще какой-то виноград, надо будет его посмотреть.
>> No.16486 Reply
>>16484
Забыл написать самое главное, что кому то надо научиться рассуждать о хаскикоде.
>> No.16492 Reply
Так, наконец-то дошли руки. http://hpaste.org/56198. Забавно, но без соответствующей декларации типов ghc паникует. Конечно, толку от нее будет не больше чем от предыдущей, но разгребать чужой хаскикот оказалось довольно занимательно. В исходниках, хочу заметить, сущий хаос, но разобраться в итоге серьезных проблем не составляет. По самим преобразованиям сверх того, что ты сможешь найти сам, мне добавить особо нечего, ну а переписать на что-нибудь пошустрее списоков, конечно, нужно.
>> No.16499 Reply
File: 827c918d01054aec3703403e06230abc85a0fb7e.jpg
Jpg, 313.53 KB, 700×700 - Click the image to expand
edit Find source with google Find source with iqdb
827c918d01054aec3703403e06230abc85a0fb7e.jpg
http://hpaste.org/56218
Наконец допилил франкенштейна, но получилось как всегда. Алсо я так и не понял почему внезапно стрим мог бы оказаться безразмерным, ну да ладно, если уж автор настаивает..
>> No.16510 Reply
File: Screenshot at 201...
Png, 211.81 KB, 1366×744
edit Find source with google Find source with iqdb
Screenshot at 2012-01-08 17:46:22.png
File: Untitled.png
Png, 61.42 KB, 515×416
edit Find source with google Find source with iqdb
Untitled.png
File: nyu0py.png
Png, 362.52 KB, 640×480
edit Find source with google Find source with iqdb
nyu0py.png

>>16499
Подставил в функцию ребят pure-fft, выгоды никакой не случилось, но и не тормозит в отличие от моей реализации (на рисунке в консоле ./nfft - это http://hpaste.org/56218 + pure-fft, ./myfft -p 32768 - pure-fft, ./myfft -m 32768 - моя реализация).

Над конкретно этой функцией разбиения на четные и нечетные похоже сильно стараться и не стоит, по-моему оверхед вышел. Мне вот интересно было найти какой-нибудь более удобный шаг алгоритма, чтобы он плавнее ложился на хаскель, а то это яростное шебуршение индексами элементов - че-то совсем не то. Вон картинку нарисовал, правдо ничего нового там не нашел - только то, о чем уже было прочитано в википедии. Вообще скорее всего не получится - алгоритм-то сверхизвестный, тут маловероятно, что можно придумать что-то новое, особенно в плане оптимизации. Пойду, слазаю в профайлер на всякий случай.
>> No.16512 Reply
>> No.16515 Reply
Профрепорт недвусмысленно намекает, что пора остановиться. На самом деле мне просто было интересно каковы потенциальные кровавые жертвы для достижения более или менее нормальной производительности на типовых списковых задачах у хаски. В любом случае я бы числожевалки писал на це.
>> No.16519 Reply
>>16515
> Профрепорт недвусмысленно намекает, что пора остановиться
Таки добил: http://hpaste.org/56241 http://hpaste.org/56242 ("pfft" - pure-fft, "fft-test -n" моё).
Кто выигрывает непонятно, профайлер говорит, что у меня быстрее почти в 1.5 раза, линукс говорит, что одинаково в пределах погрешности.

http://hpaste.org/56244 http://hpaste.org/56245
> В любом случае я бы числожевалки писал на це.
Так да, я просто с выразительностью играюсь, вон немного научился пользоваться (***). Корректность реализации преобразования фурье типами не сильно-то проверишь (ну разве что в агдах каких-нибудь).
>> No.16520 Reply
File: foo.png
Png, 15.12 KB, 764×199 - Click the image to expand
edit Find source with google Find source with iqdb
foo.png
>>16519
Хоть бы кот показал, интересно же. А я тут заменил все на последовательности, в принципе это не особо залечило, зато показало, что списки страшно медленные.
>> No.16521 Reply
>>16520
> кот
Что-то с первого раза проглядел. Уже нашел.
>> No.16522 Reply
>>16520
Так есть же код. Два нижних пастебина. Вот еще подхаченый pure-fft, чтобы в него профайлером удобно глядеть было http://hpaste.org/56247
>> No.16523 Reply
>>16522
Да-да, уже нашел. Ну и вот еще http://hpaste.org/56248
>> No.16524 Reply
>>16520
Вообще такое доминирование секвенций над списоками у тебя на картинке интересно. Правда я уже в пижамке, когда-нибудь в другой раз.
>> No.16525 Reply
File: 125250775428259.jpg
Jpg, 287.05 KB, 650×650 - Click the image to expand
edit Find source with google Find source with iqdb
125250775428259.jpg
>>16524
В общем-то ничего удивительного: что (++), что (!!) имеют сложность O(n) для списков, а для подвешенных деревьев аналогичные операции логарифмические даже логарифм от меньшего поддерева.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]