metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-09-11 12:38 pm

Ниасилил

Почему я втащил кложурь вместо хаскеля в продакшен - потому что слишком туп, чтобы понять вот такое: http://hackage.haskell.org/package/base-4.7.0.1/docs/src/Data-List.html#permutations

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

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

[identity profile] blackyblack.livejournal.com 2014-09-11 10:07 am (UTC)(link)
Дак у кложури в ядре ровно та же чернь. Ещё и макросы, которые нельзя каррировать почему-то.

[identity profile] 4da.livejournal.com 2014-09-11 02:21 pm (UTC)(link)
> Ещё и макросы, которые нельзя каррировать почему-то.
проблемы языков без четко разделенных syntax phases

[identity profile] avnik.livejournal.com 2014-09-11 05:41 pm (UTC)(link)
рекурсивные/anaphoric макросы то можно?

[identity profile] 4da.livejournal.com 2014-09-11 09:07 pm (UTC)(link)
в схемке? можно.

[identity profile] evgenijm86.livejournal.com 2014-09-11 10:19 am (UTC)(link)
Да, Хаскел позволяет выразить некоторые идеи очень компактно. Настолько, что потом хрен поймешь что имелось ввиду. Это удобно при написании кода, но абсолютно не удобно тому, кто потом будет это сопровождать.

И вообще все эти where и рекурсия чем-то подозрительно напоминают хорошо замаскированный goto.
Edited 2014-09-11 10:32 (UTC)

[identity profile] metaclass.livejournal.com 2014-09-11 11:26 am (UTC)(link)
Ох блин, про goto очень точно. Его же не одобряли потому, что он убивает всякую возможность рассуждать о происходящем.
Тут то же самое - косвенная рекурсия, из понятных блоков только foldr
ext_646638: (Default)

[identity profile] rdia.livejournal.com 2014-09-11 02:14 pm (UTC)(link)
http://kouzdra.livejournal.com/464695.html?thread=21930807#t21930807

"За рефал не скажу, поскольку не программировал - а вот в ML и ко спагетти код пишется легко и непринужденно:
..."

Там ещё и пример есть.

[identity profile] thesz.livejournal.com 2014-09-11 03:52 pm (UTC)(link)
Ага. Внутре эффекты, как я и ожидал.

Уважаемый хозяин блога не может привыкнуть к тому простому факту, что внутре вычислений Хаскеля нет побочных эффектов. Вообще. Даже если написано when goodReason dieViolently.

Поэтому большую часть времени я на Хаскеле программирую, почти не включая мозг. У вычисления есть тип? Этого достаточно в 97,1415926% случаев.
ext_646638: (Default)

[identity profile] rdia.livejournal.com 2014-09-11 04:28 pm (UTC)(link)
Там же, комментом ниже, есть без фефектов.

[identity profile] thesz.livejournal.com 2014-09-11 05:09 pm (UTC)(link)
У вас глаз замылен. Там есть эффекты.
ext_646638: (Default)

[identity profile] rdia.livejournal.com 2014-09-11 05:25 pm (UTC)(link)
Ну можно через параметр вставить и рекурсией.
ext_646638: (Default)

[identity profile] rdia.livejournal.com 2014-09-11 06:54 pm (UTC)(link)
Ну Printf там вообще безобиден - хотите я в том же стиле вам вычисление квадратного корня напишу? Ещё проще будет, если методом половинного деления делать - 4 метки: старт, сдвиг левой границы, сдвиг правой границы, выход по точности.

[identity profile] thesz.livejournal.com 2014-09-11 07:19 pm (UTC)(link)
Да-да Безобиден. Ага.

[identity profile] tzirechnoy.livejournal.com 2014-09-11 10:20 am (UTC)(link)
Около 20 минут прилагал сознательные усилия. Всё равно не могу разобраться.

Фанбейсик, блин. В нём тожэ было дофига любителей писать программу на 8 строк, в которой без изолирвания элементарных блоков на бумажке разобраться нельзя было.

[identity profile] permea-kra.livejournal.com 2014-09-11 12:31 pm (UTC)(link)
Как я понял, там цель - получить все возможные перестановки даже в случае бесконечной последовательности. Это гораздо менее тривиальная задача, чем 'получить все перестановки конечной последовательности' и действительно требует хитрожопого выверта.

[identity profile] swizard.livejournal.com 2014-09-11 01:54 pm (UTC)(link)
Согласен, и вряд ли эта задача существенно более красиво решается каком-нибудь другом языке.

[identity profile] max630.livejournal.com 2014-09-11 12:39 pm (UTC)(link)
полагаю, там можно было и яснее написать, но они наотимизировали. ну и эта милая привычка лепить 1-2 сибвольные имена...

[identity profile] antilamer.livejournal.com 2014-09-11 04:18 pm (UTC)(link)
Скажу честно, я тоже ничего не понял (в Permutations). Интересно было бы разобраться и переписать почитаемее.

Про FFI тоже полностью согласен. Недавно целый день на хакатоне пытался выяснить, откуда в программе с использованием gtk2hs вываливается out of memory из нативного кода. Так и не выяснил.

[identity profile] geniepro.livejournal.com 2014-09-11 04:39 pm (UTC)(link)
Для контраста следовало бы привести референсную реализацию этих пермутаций на Кложуре...

[identity profile] antilamer.livejournal.com 2014-09-11 05:22 pm (UTC)(link)
Нашёл обсуждение, из которого родилась текущая версия permutations.
http://www.haskell.org/pipermail/glasgow-haskell-users/2009-August/017640.html
http://www.haskell.org/pipermail/libraries/2007-December/thread.html#8788