Главная Настройка Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски


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

Check this out!


[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 673 | 33 | 135
Назад Вниз Каталог Обновить

Haskell-тред #5 Haskell-тред !5EJ71eKlNQ 09/04/17 Вск 12:33:33  969768  
92919667742348.jpg (212Кб, 550x412)
Грише похуй на этот тред.

Basics - http://learnyouahaskell.com/chapters
Medium - http://book.realworldhaskell.org/read
Concurrency - http://chimera.labs.oreilly.com/books/1230000000929/index.html
Web - http://www.yesodweb.com/book
Аноним 09/04/17 Вск 12:44:04  969781
Оп-хуй. В прошлом треде прикрепил Нэша, теперь Перельмана.
От себя посоветую книгу
Christopher Allen, Julie Moronuki Haskell Programming from first principles
Она мне больше Real World Haskell понравилась
Аноним # OP  09/04/17 Вск 12:53:43  969798
>>969781
Спасибо, приебеню к следующему.
От себя рекомендую задачки на codewars для практики.
Аноним 10/04/17 Пнд 07:10:25  970711
>>969768 (OP)
Это тред одного Семёна или на борде реально есть секта хаскелистов? Впервые вижу этот тред, а он уже пятый.
Аноним 10/04/17 Пнд 08:04:12  970717
>>970711
Чё сразу секта? Тред не очень активен, но в нём пишут. Другое дело, что много постов типа : "Зачем этот ваш хаскелль нужен?", "В чём суть ФП?", "ООП говно", "ФП говно".

Аноним 10/04/17 Пнд 09:31:04  970727
Давеча открыли Хачкиль-код в продакшоне:
https://github.com/wireapp/wire-server
Аноним 10/04/17 Пнд 10:07:52  970732
>>970711
Да в принципе есть народ, в следующем треде сделаю нормальную шапку, с ссылками на задачки.
Аноним 10/04/17 Пнд 13:03:57  970815
я единственный на всей доске кто забыл хашкель
щас используем эфсярп на продакшоне, хещкель не трогал уже года 2, как универ закончил
что там новенького? наследование мандадки от аппликатива уже завезли?
Аноним 10/04/17 Пнд 13:24:08  970827
>>970815
>наследование мандадки от аппликатива уже завезли?
Да
Аноним 10/04/17 Пнд 14:30:02  970872
Чо такое гомоморфизм, функтор, моноид, Абелевая группа и зачем концептуально они нужны?
Аноним 10/04/17 Пнд 14:44:49  970882
>>970872
Хуетень чтобы тешить чсв.
Аноним 10/04/17 Пнд 15:33:48  970909
>>970872
изучая эти понятия ты одновременно изучаешь все реальные обьекты которые обладают свойствами заданными в определениях
например если твоя мамка удовлетворяет свойствам функтора то к ней применимы все теоремы о функторах
Аноним 10/04/17 Пнд 17:37:57  970984
>>970872
> моноид
Какая-то библиотека может автоматически распараллелить код, как только увидит моноид, так как там операция ассоциативна
Аноним 10/04/17 Пнд 18:38:58  971036
Надеюсь Вы мне сможете помочь. Я написал прогу, которая считает функцию Неймана, в качестве аргумента она принимает комплексное число, суть вопроса: как передать в качестве аргумента, список чисел от 0.0+1i до 14.0 + 1i, как вы видите, мнимая часть всегда равна 1.
Конструкция данного вида:
mapM_ print([(bessY 0 z 100) | z <- [0.1,0.2..14.0]])
Здесь 0 - порядок, z - аргумент, она выводила значение ф-ии Неймана для аргументов от 0.1 до 14.
Она работала, но в таком случае аргумент был вещественным числом, а надо, чтобы был комлпексным.
Аноним 10/04/17 Пнд 18:57:44  971053
>>971036
Разобрался сам.
Аноним 11/04/17 Втр 01:29:28  971449
А я напоминаю, что вторая часть уже началась https://stepik.org/course/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5-Haskell-%28%D1%87%D0%B0%D1%81%D1%82%D1%8C-2%29-693/
Аноним 12/04/17 Срд 16:27:14  972443
>>969781
Буду накатывать эту книгу в свободное время. Мне хуёвенько и все надоело, хочу прикоснуться к прекрасному.
А нихуя остальные его учат, интересно?
Аноним 14/04/17 Птн 00:45:55  973295
Куда мне путь если я изучу Haskell? Куда я смогу заделаться? Математику знаю, но на уровне двух курсов вышки в относительной шараге.
Аноним 14/04/17 Птн 14:58:25  973511
Всем ли доступен хаскель?
Аноним 14/04/17 Птн 15:05:55  973522
>>973511
Только по спец. разрешениям.
Аноним 14/04/17 Птн 15:07:18  973525
>>973522
А гуманитарии осилившие жабу, способны ли осилить Хаскель?
Аноним 14/04/17 Птн 15:39:37  973541
>>973525
Вполне, но будь готов, что от всех других языков тебя потом будет тошнить, от Жавы в первую очередь.
Аноним 14/04/17 Птн 15:41:42  973544
>>973541
А от Ассемблера? Тоже ЯП жеж.
Аноним 14/04/17 Птн 16:03:00  973558
>>973541
Хз, мне жаба не стала меньше нравится, уж если говорить о человеческом фп, где не нужно изворачиваться, то это скала, хочешь пиши на джаве с синтаксическим сахаром, хочешь упарывай монады и функторы, а хаскель - язык для каких-то фп фанатиков, не все вещи удобно и нужно делать в функциональном стиле так-то.
Аноним 14/04/17 Птн 16:40:11  973588
>>973558
Значит, ты не дучил хаскель.
Аноним 14/04/17 Птн 16:42:29  973590
>>973588
Ну скажи тогда, что там такого крутого, чего нет в других фп языках?
Аноним 14/04/17 Птн 16:43:46  973591
>>973590
Удваиваю.
Аноним 14/04/17 Птн 16:48:17  973596
>>973590
Я не про это. Я говорю, что, если ты действительно освоил ФП (например хаскель), то у тебя не может не возникнуть отвращение к джаве.
Аноним 14/04/17 Птн 18:19:17  973676
Поясните, во что разворачивается эта хуйня:
fibs = 1 : scanl (+) 1 fibs

Не сам результат, а как происходит вычисление. Я всю голову сломал. То есть, 1 :, потом идет scanl, но он вызывает fibs, где снова идет 1:. Как это работает?
Аноним 14/04/17 Птн 18:21:56  973682
Если кто пропустил, с февраля начала выходить вторая часть видеолекций о теории категорий для программистов
https://www.youtube.com/playlist?list=PLbgaMIhjbmElia1eCEZNvsVscFef9m0dm
Аноним 14/04/17 Птн 18:23:26  973689
>>973676
http://hackage.haskell.org/package/base-4.9.1.0/docs/Prelude.html#v:scanl :
scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...]
Аноним 14/04/17 Птн 18:38:43  973696
>>969768 (OP)
наконец-то норм шапка
Аноним 14/04/17 Птн 21:05:21  973787
Посоветуйте функциональный язык программирования для операционной системы с экзоядром. Низкоуровневые части буду писать на forth.
Аноним 14/04/17 Птн 21:25:19  973794
>>973787
Кобол.
Аноним 14/04/17 Птн 22:11:17  973810
>>973794
Так у него другая парадигма же.
Аноним 16/04/17 Вск 23:13:44  974628
>>973590
чистоты и ленивости
Аноним 18/04/17 Втр 08:33:29  975406
Почему у Хаскелла такой сложный синтаксис? Он конечно еще легче, чем у Rust'а, но все-же.
Аноним 18/04/17 Втр 09:11:16  975409
14830323909160.png (324Кб, 1274x1834)
14830323909392.png (511Кб, 1288x1886)
>>975406
Не сложный, а минималистичный.
Кресты местами намного блевотнее выглядят.
Аноним 18/04/17 Втр 09:21:18  975413
>>975409
А нет чего-то такого эдак однородного? Вот в лиспе мало всяких странных символов и все однородное, а что-то подобное но отвечающее нормам 21 века (монадки, функторы, зависимые типы) нельзя сделать?
Аноним 18/04/17 Втр 18:52:23  975722
>>975413
scala
Аноним 18/04/17 Втр 19:07:30  975738
>>975722
Но это не чистый функциональный язык по сравнению с хаскелем офк
Аноним 18/04/17 Втр 22:19:28  975990
>>975406
для начала важно разобраться с инфиксными операторами и паттерн-матчингом
остальное дело привычки
и да, пробел – оператор аппликации

а по факту ты очень удивишься насколько он читабелен и понятен
Аноним 18/04/17 Втр 22:22:04  975994
>>975990
Он == Haskell
Rust читался мною более менее, но потом начались лайфтаймы и это ебануться!
Аноним 19/04/17 Срд 00:47:15  976074
>>975406
Сходи, почитай значение слова "синтаксис", потом кукарекай.
Аноним 19/04/17 Срд 12:05:17  976254
Ну что блин ему не так?
Аноним 19/04/17 Срд 14:05:29  976307
>>976254
>Sublime Text
Аноним 19/04/17 Срд 14:34:20  976324
download.png (31Кб, 788x153)
>>976254
Ололо https://otvet.mail.ru/question/199977542
Аноним 19/04/17 Срд 18:46:33  976426
>>976254
Нахуй его, у меня вообще Repl перестал открываться через пару дней использования.

Собственно можно использовать Idea Community Edition + Haskell plugin, если памяти в системе достаточно.
Аноним 19/04/17 Срд 18:48:10  976428
>>976426
Ты можешь объяснить, сколько будет учиться хаскель до вменяемого состояния, при ежедневном изучении в часов так по 10 в сутки?
Аноним 19/04/17 Срд 19:07:28  976441
>>976428
Так от бэкрграунда зависит. Кто ты, непонятно - школие или тырпрайз макака или вкатыватель какой. Кроме того, 10часовое задрачивание ни в чем пользу не принесёт, важно чередавать активную и фоновую работу мозга, максимально интенсивно загрузить его и отвлечься на другие задачи, чтобы он скрипел в фоновом режиме. У Пуанкаре об этом где-то здорово написано.

Делай что должен и будь что будет.

Кстати, можешь попробовать в repl выполнить :set prompt "" - помню из-за бажной реализации очистки экрана, меня бесило что ввод ломался. Может поможет и тебе. Загруженных модулей конечно не увидишь, если это важно.
Аноним 19/04/17 Срд 19:07:52  976443
>>976441
сажа откуда-то
Аноним 19/04/17 Срд 19:10:29  976445
>>976441
Вкатыватель. Ну хоть приблизительно, в диапазон помести.
Аноним 19/04/17 Срд 19:19:21  976458
>>976445
Судя по общению, тебе хачкиль будет даваться с трудом. Попробуй js для начала, потом вернешься или нет
Аноним 19/04/17 Срд 20:35:03  976493
>>976458
PureScript же
Аноним 19/04/17 Срд 20:42:51  976497
>>976254
зачем ты в .hs-файл копируешь ghci сессию,
ты что ебанутый? что ты пытаешься сделать?
Аноним 19/04/17 Срд 20:49:17  976502
>>976497
Лол. До твоего ответа думал, что у него саблайм пытается влезть в REPL и обработать её как .hs-файл. Оказывается это просто скопипащенный REPL.

>>976254
Друг, ты безнадёжен.
IDE Аноним 22/04/17 Суб 15:41:43  977793
Чем код редактируете? Писать без IDE в статически типизированом языке - себя не уважать, собирать своими руками парашу из emacs/vim не хочу.
Для однострочников текстовый редактор пока подходит, но на будущее интересно.
В https://wiki.haskell.org/IDEs одна параша - эклипс тормозное говно и не нужен, сублимы-атомы хуита.
Что можете сказать про жидею с плагином и Leksah?
Аноним 23/04/17 Вск 00:07:59  978102
>>977793
Жидея - кал. Я под атомом и скажу, что не хуже жидеи будет, даже стилистические улучшения предлагает. Но есть один НЬЮАНС. Из-за эпичного проеба в ghc-mod память течёт эпично. Тому в соседней сонсоли у меня запущен
watch -n 15 'pkill ghc-mod'

Так победим!
Аноним 23/04/17 Вск 18:14:48  978580
>>978102
ну и костыль, братишь) а команда прикольная, спасибо!
Аноним 23/04/17 Вск 21:05:20  978702
>>969768 (OP)
Нашел работу с хаскеллем. Дерзайте аноны, монады сила!
кто там ищет иде, гуглите Spacemacs
Аноним 23/04/17 Вск 22:36:01  978746
>>978702
Откуда заказчик? Офис или нет? Какая сфера применения?

Ну если он не ответит, расскажите кто использует в работе данный яп

Заранее спасибо
Аноним 24/04/17 Пнд 00:16:11  978836
>>977793
visual studio code с плагином Haskero
Аноним 24/04/17 Пнд 11:08:52  979007
>>976493
Это плохой совет. Его постоянно перепиливают и захуячивают новые странные фичи, так что новичку это не надо. Если что, elm лучше для новичка.
Аноним 24/04/17 Пнд 11:10:43  979010
>>977793
>собирать своими руками парашу из emacs/vim не хочу
Ну и дурачок. Emacs + intero - сила! Минимальный конфиг можешь найти у сноймана
Аноним 24/04/17 Пнд 11:19:57  979014
Я перестал испытывать какой-либо интерес к программированию, когда осознал всю независимость формы и результата. Я люблю области, где форма = результат. В программировании, форма = код. Ты можешь сколько угодно менять структуру своего кода и ксс, можешь хоть обфусцировать и минифицировать его тыщу раз, а результат в браузере от этого никак не изменится. Ценность формы здесь чисто менеджмент-уровня, майнтабельность все дела. Причём, к сожалению, я не могу сказать, что "красивое функциональное решение" выстраданное на хаскеле за неделю всегда майнтабельнее, чем делающий абсолютно то же самое, написанный на коленке за полчаса скрипт на ноде, в котором всё просто и банально... Да и сама майнтабельность это чисто прикладная ценность, нет в ней ничего фундаментального и вечного.
Аноним 24/04/17 Пнд 16:18:12  979179
>>979014
>Причём, к сожалению, я не могу сказать, что "красивое функциональное решение" выстраданное на хаскеле за неделю всегда майнтабельнее, чем делающий абсолютно то же самое, написанный на коленке за полчаса скрипт на ноде, в котором всё просто и банально
Кому ты пиздишь
Ты никогда ничего не писал на хаскеле, съеби
Аноним 24/04/17 Пнд 17:12:21  979205
Прошу вибачення за вопрос по софту, но: Atom или VSCode?

Я не особо в восторге от сих хипстерских редакторов и кроме как для Хаскеля Atom не использую; Atom мне нравится интеграцией с ghc-mod, показывает типы. Не нравится странным REPL. Файл в него загружать/перезагружать нужно явно, дополнение там идиотское.
Аноним 24/04/17 Пнд 20:29:10  979289
>>979205
>>978836
Аноним 24/04/17 Пнд 20:36:15  979294
>>979179

Haskell:
(r ^? responseBody . key "collection" . nth 0 . key "track" . key "id" . _Integer) <|> (r ^? responseBody . key "collection" . nth 0 . key "playlist" . key "id" . _Integer)

JavaScript:
(res.collection[0].track || res.collection[0].playlist).id
Аноним 24/04/17 Пнд 20:57:16  979301
>>978746
Так и до деанона недалеко.
Смотри тематические сообщества.
Еще есть годная "конфа", там можно задать вопросы и найти иногда работу.
Одно время записывались радио выпуски о хаскелле, разговоры на всякие темы, интервью, обзор новостей и прочее, но сейчас перестали.
Аноним 24/04/17 Пнд 23:57:51  979445
Подкиньте плиз задач для ньюфагов
Аноним 25/04/17 Втр 12:08:53  979700
>>979301
>но сейчас перестали
ты про "бананы и линзы"? да вроде ж опять начали
Аноним 25/04/17 Втр 12:10:29  979702
>>979445
на хаскельвики есть 99 задач
Аноним 25/04/17 Втр 12:49:23  979732
>>979702
Благодарю
Аноним 25/04/17 Втр 21:15:39  980087
ПОЧАЛОСЬ
https://jobs.dou.ua/companies/livatek/vacancies/40483/
Аноним 25/04/17 Втр 21:39:28  980103
Почему haskell часто советуют новичкам?
Аноним 25/04/17 Втр 21:48:00  980105
>>980103
Погугли аниме Boku No Pico и игру Battletoads, поймешь.
Аноним 25/04/17 Втр 22:08:19  980114
>>980087
Чтобы индуцировать у человека аутизм/шизофрению, а потом при помощи NLP сделать из него послушного вьябывальщика, полного энтузиазма, который будет пахать не просто фултайм, но ещё и после работы, перед работой, по дороге на работу, и на выходных. Сниматься в рекламе своих технологий и своей компании с искренней улыбкой полной счастья. Потому что люди без серьёзных психических отклонений и незагипнотизированные на успех в 21-то веке работать, вообще, мягко говоря, не любят, и в такую ноулайферскую парашу как программирование их затянуть нереально, хотя в быту они вполне могут писать скрипты, более сложные алгоритмически, чем все ваши ёбаные интерпрайзы.
Аноним 25/04/17 Втр 22:15:10  980119
145987367214549[...].jpg (33Кб, 512x512)
>>980105
I get it
Аноним 25/04/17 Втр 22:19:31  980124
>>980114
>>980103
Аноним 26/04/17 Срд 00:06:29  980217
>>980114
А что это там бумкнуло?
Аноним 26/04/17 Срд 00:08:43  980221
>>980087
> 30+ years of working experience as a Haskell developer
Аноним 26/04/17 Срд 00:15:24  980227
>>979294
JavaScript:
(res.collection && res.collection[0] && res.collection[0].track || res.collection && res.collection[0] && res.collection[0].track) && (res.collection && res.collection[0] && res.collection[0].track || res.collection && res.collection[0] && res.collection[0].track).id

пофиксил за тебя
Аноним 26/04/17 Срд 00:16:09  980228
>>980227
даже вот так:
(res && res.collection && res.collection[0] && res.collection[0].track || res.collection && res.collection[0] && res.collection[0].track) && (res && res.collection && res.collection[0] && res.collection[0].track || res.collection && res.collection[0] && res.collection[0].track).id
Аноним 26/04/17 Срд 00:29:11  980237
>>979294
Haskell:
r ^? responseBody . key "collection" . nth 0 . (key "track" <> key "playlist") . key "id" . _Integer

Аноним 26/04/17 Срд 00:44:33  980247
>>980227
>>980228
>>980237
Нет, это всё рабочий код. В хаскеле монойд так не получится юзнуть, линзы так не работают, я много чё пробовал, даже тред создавал, максимум в биндинг вынести со строкой на вход типа f "track" <|> f "playlist", причём там тип надо будет указать. В жс мне не нужны эти проверки которые ты дописал, мне нужно исключение, если вдруг в пейлоаде чего-то не оказалось, потому что это исключительная ситуация, ожидаемое поведение - что там всегда будут эти поля.
Аноним 26/04/17 Срд 12:41:41  980413
>>980237
И как это распарсить в мозгу?
Аноним 26/04/17 Срд 13:37:43  980442
>>977680
Не совсем так. Функциональщики - это в первую очередь фанатики, социоблядками-хипстерами они являются не так часто, большинство вообще не ходит на конференции. Какой-то профит в плане типобезопасности у них действительно есть и с десятилетиями нарастает, просто в практическом отношении он гораздо менее значимый, чем им кажется, а главное, увеличеная сложность программ зачастую с перевесом нивелирует эти профиты, когда дело доходит до реальной майнтабельности. Динамические петушки вроде лисперов - это такие же фанатики, только с другими ценностями, с реальностью их ценности пересекаются не лучше.
Аноним 26/04/17 Срд 14:47:48  980494
>>980247
> В хаскеле монойд так не получится юзнуть, линзы так не работают

> stack repl
Configuring GHCi with the following packages:
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from C:\Users\alex\AppData\Local\Temp\ghci5680\ghci-script
Prelude> import Data.Aeson.Lens
Prelude Data.Aeson.Lens> import Data.Text
Prelude Data.Aeson.Lens Data.Text> import Control.Lens
Prelude Data.Aeson.Lens Data.Text Control.Lens> import Data.Semigroup
Prelude Data.Aeson.Lens Data.Text Control.Lens Data.Semigroup> :set -XOverloadedStrings
Prelude Data.Aeson.Lens Data.Text Control.Lens Data.Semigroup> let t = "{\"collection\": [{\"track\": {\"id\": 42}}]}" :: Text
Prelude Data.Aeson.Lens Data.Text Control.Lens Data.Semigroup> t ^? key "collection" . nth 0 . (key "track" <> key "
aylist") . key "id" . _Integer
Just 42
Prelude Data.Aeson.Lens Data.Text Control.Lens Data.Semigroup> let t = "{\"collection\": [{\"playlist\": {\"id\": 42
]}" :: Text
Prelude Data.Aeson.Lens Data.Text Control.Lens Data.Semigroup> t ^? key "collection" . nth 0 . (key "track" <> key "
aylist") . key "id" . _Integer
Just 42
Аноним 26/04/17 Срд 14:51:15  980498
>>980494
Достойны ответ js-блядку.
Аноним 26/04/17 Срд 17:10:05  980575
>>973558
>скала
блеванул, спасибо, что напомнил
Аноним 26/04/17 Срд 17:10:46  980578
>>975722
блеванул еще раз
Аноним 26/04/17 Срд 17:14:05  980583
>>980114
весело тут у вас
Аноним 26/04/17 Срд 18:44:44  980619
>>980578
>>980575
А чем тебе скала не нравится? Это лучшее их двух миров фп и ооп, где ты сам выбираешь в каком стиле писать.
Аноним 26/04/17 Срд 19:57:07  980661
Ребят, а как можно запустить в терминале программу на хаскелле, чтобы она как скрипт работала? ну то есть выдала output и всё, прекратила работать. чтоб как на питуне лол
Аноним 26/04/17 Срд 20:18:02  980668
>>980661
Никак.
Аноним 26/04/17 Срд 20:27:34  980678
>>980668
охуеть
Аноним 26/04/17 Срд 20:41:04  980696
>>980661
>>980668
>>980678
http://stackoverflow.com/questions/8676331/how-to-run-a-haskell-file-in-interpreted-mode
Аноним 26/04/17 Срд 20:44:50  980699
>>980696
Нахуй иди.
Аноним 26/04/17 Срд 23:12:46  980805
>>980619
нет чистоты? временем компиляции? скоростью работы? отсталостью средств разработки? синтаксисом наконец?
с хаскелем хоть понятно что это борщехлебство, а скала с претензией.
И блядь синтаксис уродский еще.
Аноним 26/04/17 Срд 23:30:48  980813
>>980805
> а скала с претензией.
Это не скала с претензией, а ее в проде используют, а в остальном

>отсталостью средств разработки?

А идее нормальная поддержка

>синтаксисом наконец?
Вкусовщина

>временем компиляции? скоростью работы?
Ну раз в проде юзают, значит ни критично
Аноним 27/04/17 Чтв 11:11:04  980926
>>980813
хаскель тоже используют в проде. Скала конечно популярнее, но тоже маргинальная.
> А идее нормальная поддержка
В идее? Ну вроде норм, только тормозит, хотя это не с идеей связано. Но я вообще-то говорил про ебанутый сбт.
> Вкусовщина
Вспомнил, поблевал.
> ни критично
ясно
Аноним 27/04/17 Чтв 15:11:54  981012
>>980494
Да, сработало, я видимо пытался только с (<|>). Но всё равно сложновато, для такой элементарной вещи. В хаскеле вечно приходится думать, напрягать мозги, учить новые инструменты, комбинаторы, для всех тех же задач, которые в обычных яп решаются встроенными конструкциями типа точечки, индексирования, var/let, for/while. Лучше один раз выучить хештаблички, массивы, переменные, ветвления и циклы, и потом уметь выразить на этом любую программу, чем на каждый частный случай придумывать новые комбинаторы и даже парадигмы типа линз и тд. Хаскель позволяет тебе оставаться вечным студентом, ты никогда не можешь его выучить, и за счёт этого он будет удерживать твой интерес, если ты не догадаешься немного абстрагироваться, и подумать, а зачем это всё нужно.
Аноним 27/04/17 Чтв 15:27:14  981016
>>981012
>подумать, а зачем это всё нужно
Чтобы напрягать мозг в процессе кодирования, а не хреначить бойлерплейт, как макака?
Аноним 27/04/17 Чтв 16:11:48  981047
>>981012
>вечно приходится думать, напрягать мозги, учить новые инструменты, комбинаторы
сложна-сложна-нипанятна

>для всех тех же задач, которые в обычных яп решаются встроенными конструкциями типа точечки
это до тех пор пока ты делаешь какую-нибудь примитивную тупую хуйню.
чуть усложню твой пример. попробуй сделать это на говноскрипте:
t ^? key "collection" . nth 0 . ((key "track" . key "trackId") <> (key "playlist" . nth 0 . key "track" . key "trackId"")) . _Integer
или
t ^? key "collection" . nth 0 . (key "track" <> key "playlist") . (key "id" <> key "name") . _Integer

>переменные, ветвления и циклы, и потом уметь выразить на этом любую программу
вырази простейшую комбинацию map и filter
Haskell:
map g . filter p . map f

Императивное говно:
let result = [];
foreach (x in xs) {
if (p(x)) result.push(g(x))
}

ой, понадобился еще один фильтр и отображение:
Haskell:
map h . filter q . map g . filter p . map f

Императивное говно:
let result = [];
foreach (x in xs) {
if (p(x)) {
let y = g(x)
if (q(y)) {
result.push(h(y))
}
}
}

и так далее

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

Аноним 27/04/17 Чтв 16:53:48  981065
>>981047
> t ^? key "collection" . nth 0 . ((key "track" . key "trackId") <> (key "playlist" . nth 0 . key "track" . key "trackId"")) . _Integer
let firstItem = res.collection[0]; if (firstItem.track): return firstItem.track.trackId; else: return firstItem.playlist[0].trackId;
Оформил в ширину чисто ради большего comedy value. А вообще, я не предлагаю отказываться от map и filter. Если какой-то комбинатор приводит к более компактному и понятному коду и нужен настолько часто, что ты не успеваешь о нём забыть, и тебе не надо его каждый раз гуглить, выгода в его использовании очевидна. Вот если взять fold/reduce, кроме случая когда они используются для расстановки уже задефайненого бинарного оператора между элементами коллекции, они практически всегда приводят к более сложному или даже громоздкому коду, чем цикл с переменными. А частные случаи свёрток кроме map и filter быстро забываются.
> до тех пор пока ты делаешь какую-нибудь примитивную тупую хуйню.
Любая сложная хуйня раскладывается на примитивную тупую хуйню.
Аноним 28/04/17 Птн 11:58:01  981434
Прохожу курс по хаскелю, есть задание

I(1 балл) Следующий рекурсивный тип данных задает

бинарное дерево:data Tree a = Leaf | Node (Tree a) a (Tree

a) Напишите следующие функции:Iвычисление суммы элементов дерева
treeSum :: Tree Integer -> IntegertreeSum = undefined

б) вычисление максимальной высоты дерева
treeHeight :: Tree a -> InttreeHeight = undefined

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

https://gist.github.com/Cornpop456/b1aba0581949418672b1f6f061ab6d04
Аноним 28/04/17 Птн 13:20:23  981459
>>981434
Если вместо сравнений (==), (/=) везде использовать паттерн-матчинг, то Eq не понадобится. Код при этом может стать более сложным и громоздким.
Аноним 28/04/17 Птн 13:34:31  981464
>>981459
Понял, спасибо, видимо задание было на паттерн матчинг
Аноним 28/04/17 Птн 13:41:01  981467
>>981434
treeSum :: Tree Integer -> Integer
treeSum Leaf = 0
treeSum (Node as x bs) = x + treeSum as + treeSum bs

treeHeight :: Tree a -> Int
treeHeight Leaf = 0
treeHeight (Node as _ bs) = 1 + max (treeHeight as) (treeHeight bs)

>>981459
>Код при этом может стать более сложным и громоздким
ебанись
Аноним 28/04/17 Птн 14:04:00  981477
>>981467
Повезло. Если б там (==) по делу были, оно бы стало только хуже.
Аноним 28/04/17 Птн 14:04:14  981478
>>981467
Спасибо
Аноним 28/04/17 Птн 17:30:43  981566
Хочется писать на чем-то функциональном и получать за это деньги, что стоит ближе к haskell, как к эталону ? фп, scala или erlang/elixir?

Аноним 28/04/17 Птн 21:37:51  981654
>>981566
Scala - вакансий много и не сказать бы что на ней часто пишут в функциональном стиле, хотя есть такие проекты.
Elixir/Erlang - работа есть, начну с этого, хотя её куда меньше чем на Scala и требования тоже не хилые.
Haskell - работы ещё меньше чем в верхних двух, надо быть реально фанатиков, что сдаться и долго искать работу.
Аноним 28/04/17 Птн 21:42:42  981656
>>981654
Cпасибо, тогда буду на scala все таки ориентироваться, да и с java знаком.
Аноним 28/04/17 Птн 22:01:24  981659
>>981656
Учти, что работа - это в любом случае хуйня, не то что свои проектики в кайф кодить. С прикладной точки зрения, разницы на чём пишешь на работе, особо и нет, потому что ты будешь и так и сяк работать 8+ часов в день, даже если решаешь задачи быстрее за счёт крутого яп. Правильнее выбирать то, на чём много вакансий и заеботые зарплаты.
Аноним 28/04/17 Птн 22:07:46  981661
>>981659
Да я вообще вкатываюсь в js, это я на будущее думаю, куда перекатываться, не очень js и фронт нравится, но это довольно просто и времени на изучение этого много не нужно + куча вакансий. Для себя начал учить haskell и понял, что хочется в будущем работать на чем-то подобном.
Аноним 28/04/17 Птн 22:08:38  981662
>>981661
>довольно просто
всмысле начать довольно просто по сравнению с java c++ и тд
Аноним 28/04/17 Птн 22:16:52  981671
>>981659
Это в превозмогающей. А в загнивающей всё помягче, можно и 6 часов, можно и 4.
Аноним 29/04/17 Суб 15:19:21  981961
C3M9ThVWAAAo3VV.jpg (31Кб, 780x603)
>>969781>>972443>>969768 (OP)


Двачую
>Haskell Programming from first principles
, но с одним важным замечанием.

Эту книгу стоит пилить в ОП-пост вместе Learn you a Haskell. Она даёт хорошее энтри-лэвэл понимание как все работает в отличии от, где просто поверхностное описание, и после чего ты вроде и книгу прочёл, а как пользоваться не понял. Переоценивать, впрочем, и ее не стоит, но то, что первая глава посвящена лямбда калкулусу, символизирует.

Real World Haskell стоит оставить в качестве практического семинара после прочтения Аллена.

Аноним 29/04/17 Суб 15:42:33  981966
>>981961
По поводу лямбда калькулуса, первые три лекции вот этого курса дают хорошее представление https://compscicenter.ru/courses/func-prog/2015-spring/?tab=classes



Аноним 29/04/17 Суб 16:04:28  981980
>>981966
Судя по отзывах, у Москвина в целом курсу по ФП и Хачкеле - лучше не бывет. Может упорюсь когда-нибудь.
Аноним 29/04/17 Суб 16:15:20  981987
спрашиваю здесь, так как ФП треда нет
Сравните плз. по хардкору F# и Scala, те, кто разбирается. Что более труЪ ФП? Делаю эпохальный для себя выбор: .NET vs JVM, но в функциональном духе. Короче, что брать?
Аноним 29/04/17 Суб 16:17:51  981988
>>981980
Да мне нравится, делаю задачки на степике, а видео смотрю с того курса, так как на степике очень сжато. Да еще есть практические задания к курсу в открытом доступе http://mit.spbau.ru/sewiki/index.php/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_2015
Аноним 29/04/17 Суб 16:29:28  981992
>>981987
тебе что больше нравится C# или Java? писать-то все равно на них будешь.
Аноним 29/04/17 Суб 16:32:39  981994
>>981992
Ты что слепой? Я ж написал - выбираю между F# и Scala. Императивщина не рассматривается.
Аноним 29/04/17 Суб 16:35:49  981997
>>981994
Он про то, что вакансий на чистых scala/F# нет, везде это идут, как доп языки. А по твоему вопросу ближе к haskell F# стоит, так как корни у языков одни - ML
Аноним 29/04/17 Суб 16:41:54  982003
>>981997
Да я не спрашивал про вакансии, я спрашивал про языки. Вы с кем там разговариваете, вообще?
Аноним 29/04/17 Суб 16:44:45  982006
>>981464
Кек
Аноним 29/04/17 Суб 16:45:36  982008
14925955636770.jpg (253Кб, 725x1866)
>>981994
>Scala
>Императивщина не рассматривается
>Scala
Аноним 29/04/17 Суб 16:50:09  982012
>>982008
То есть, ты намекаешь на F#?
Аноним 29/04/17 Суб 17:12:29  982024
>>981994
На работе ты не будешь писать только на F#/Scala, ты будешь писать на их смеси с C#/Java.
Если тебе не для работы, то Haskell.
Аноним 29/04/17 Суб 17:23:31  982035
>>982024
Ну ёпрст Ты говоришь о том, что и так всем очевидно. Чтобы избежать таких ответов я специально задал конкретный вопрос. По языкам-то что? Кто-нибудь знает?
Аноним 29/04/17 Суб 17:25:25  982037
>>982035
да похуйу всем
скала это солянка, но у нее есть завтипы
F# похож на окамл, более MLный, так что потом сможешь посмотреть на всякие SML, OCaml
Аноним 29/04/17 Суб 17:31:24  982043
>>982037
>завтипы
Это даже в C++ есть.
Аноним 29/04/17 Суб 17:33:02  982047
>>982037
>F# похож на окамл, более MLный, так что потом сможешь посмотреть на всякие SML, OCaml
Есть смысл после F# смотреть на OCaml?
Аноним 29/04/17 Суб 18:59:58  982089
>>982047
Если тебя ещё не заебало это всё - тогда конечно. Там гораздо больше фич, функторы, параметризуемые модули, структурный сабстайпинг и тд.
Аноним 29/04/17 Суб 21:40:57  982163
image.png (78Кб, 1386x565)
Аноним 29/04/17 Суб 21:48:11  982168
Может кто-нибудь поделиться свежей версией Haskell Programming from first principles? В интернетах нашел только версию на начало 2016 года.
Аноним 29/04/17 Суб 22:05:56  982175
Sex1E8m.jpg (464Кб, 1131x1600)
>>982163

Аноним 29/04/17 Суб 23:29:59  982206
>>982168
У меня есть полная, но нимагу, прости.
Самому подогнал человек, купивший её, под обещание больше никому не давать даже мамке. Более того, у меня есть подозрение, что дистрибьютор впиливает туде цифровые метки, которые могут указать на него, когда она с двачей перекатится во все торрент трекеры. А таки перекатится, потому что кроме устаревшей копии в сети ничего нет.
Аноним 30/04/17 Вск 08:58:40  982280
>>982206
Да ничего, братунь. Я уже и авторам написал, попросил скидку для российских нищебродов, но если ничего не ответят в течение 2-3 дней, то куплю видимо за полную цену.
Аноним 30/04/17 Вск 09:08:41  982282
>>982206
>>982280
А эта версия 2016 насколько сыра? Полистал - вроде нормас.
Купил бы если бы работал и были деньги.
Аноним 30/04/17 Вск 10:16:00  982289
>>982282
Пары глав в конце не хватает, плюс, насколько я понимаю, другие главы тоже допиливались с тех пор. Как куплю, сравню и отпишусь.
Аноним 30/04/17 Вск 11:36:50  982315
old.png (115Кб, 746x800)
new.png (88Кб, 661x698)
>>982282
Я перекатился главы где-то с седьмой, и по диагонали сравнил пройденный материал (по диагонали, потому что попробуй-ка нормально сравнить овер 200 страниц).

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

Но они есть - если сравнивать только по утекшему в сеть материалу - овер 100 страниц. Пикрилейтед.

Алсо, в новой тоже заметно, что пара глав еще до конца редактуру не прошли, и еще будут меняться.
Аноним 30/04/17 Вск 18:26:06  982508
>>981065
Хуле же ты второй вариант с двумя <> не транслировал?

> map filter
> свертки
Аноним 30/04/17 Вск 19:16:33  982548
>>982508
> t ^? key "collection" . nth 0 . (key "track" <> key "playlist") . (key "id" <> key "name") . _Integer
Каким образом здесь name превратится в Integer? Ладно, допустим ошибка.
let firstItem = res.collection[0];
let entity = firstItem.track || firstItem.playlist;
return entity.id || entity.name;
> > map filter
> > свертки
Для структур данных с append/concat за O(1) вполне
let map = (f, xs) => xs.reduce((a, x) => a.concat([f(x)]), []);
let filter = (p, xs) => xs.reduce((a, x) => a.concat(p(x) ? [x]: []), []);
Аноним 02/05/17 Втр 06:18:59  983396
>>982548
Справедливо.
Аноним 02/05/17 Втр 22:22:52  983816
>>969768 (OP)
Почему так

lucky :: (Integral a) => a -> String
lucky 7 = "LUCKY NUMBER SEVEN!"

а не так?

lucky :: Integral -> String
lucky 7 = "LUCKY NUMBER SEVEN!"

?
Аноним 02/05/17 Втр 23:17:58  983853
>>983816
Integral - это тайпкласс, а не тип. Нет такого типа. Есть Int и Integer. В сигнатуре то, что перед "=>" называется class constraint. В нем ты указываешь тайпклассы, к которым может принадлежать типы инпута/аутпута. А дальше, после "=>" следуют типы данных которые принимает и возвращает функция (а вообще все функции в хаскелле принимают только один аргумент). т.к. ты указал, что тип а принадлежит интеграл, то принимает эта функция число. я сам ток учу, так что могу ошибаться. поправьте если что
Аноним 03/05/17 Срд 00:38:55  983883
>>983853
всё правильно
проще говоря, тип, принимаемый ф-ей lucky, может быть любым типом, реализующим класс Integral (Int, Integer, ещё вроде какие-то специфичные есть)
Аноним 03/05/17 Срд 10:28:29  984021
>>983816
Вот этот >>983853 правильно сказал, но стоит добавить почему именно нотация выглядит именно так, почему тайпкласс нельзя вписать Integral -> String

Потому, что тайпклассов в констрейнте может быть много, например
(Bounded a, Ord a) => a -> a -> Bool

Я, конечно, капитанствую, но для совсем ньюфагом лучше лишний раз явно сказать.
Аноним 03/05/17 Срд 14:20:43  984135
>>982315
дякую анончику, приду к успеху, куплю и тогда уже буду аутировать если
Аноним 03/05/17 Срд 15:16:56  984153
>>984135
Будь ласка. Ты пока упарывай доступную версию, ты и без главы посвящённой сугубо IO закончишь материал монадическим титаном на самом деле ніт, но знаний будет достаточно, чтобы начать что-то пилить.
Аноним 05/05/17 Птн 15:50:39  985237
>>984153
>>984135
Теперь це український Haskell-тред?
Аноним 05/05/17 Птн 16:16:35  985261
>>985237
Нет, не суметь в "пожалуйста" на украинском это лингвоинвалидом надо быть.
Аноним 05/05/17 Птн 21:11:24  985461
Как за очень краткое время понять всю типизацию в хаскелле? Очень краткое
Аноним 05/05/17 Птн 22:38:31  985535
>>985461
www.cis.upenn.edu/~justhsu/docs/nokinds.pdf
Аноним 09/05/17 Втр 19:11:07  987718
14939943754400.jpg (160Кб, 480x479)
Monoid. Прочитал, попробовал, пописал инстансы. Всё понятно.
Functor. Прочитал, попробовал, пописал инстансы. Всё понятно.
Applicative. Прочитал, попробовал, пописал инстансы. Всё понятно.
Monad. Прочитал, попробовал, пописал инстансы. Всё понятно.
Foldable. Прочитал, попробовал, пописал инстансы. Всё понятно.
Traversable. Кровь, кишки, распидорасило, Залго. Как вообще в это въехать?
Аноним 09/05/17 Втр 19:42:36  987739
>>987718
>Traversable
Да жесткая тема, попробуй по кускам разобрать определение функции traverse на простом случае типо https://ideone.com/8YjwQx

Это грубо говоря универсальный интерфейс для того, что менять местами внутренний и внешний контейнеры
Аноним 09/05/17 Втр 19:59:06  987750
>>987739
Я спутал с функцией sequenceA, traverse просто мапит функцию из какого-то значения в контейнер и упаковывает в другой контейнер при этом тип значения может быть функцией изменен
Аноним 09/05/17 Втр 19:59:26  987751
>>987739
Не, мне такое объяснение не катит.

Внешнюю сторону я чисто интуитивно разглядел, с трюками типа
traverse id [[1], [2]] = [[1,2]]
traverse id [[1, 2]] = [[1],[2]]
Еще увидел как что-то типа цепочки IO вычислений перепаковать в одну IO цепочки, выглядит удобно. Но вот только интуитивно разглядел, а понять не могу совсем.

Все предыдущие тайпкласы я, вроде бы, понял. По крайней мере нет ни проблем с написанием инстансов, ни проблем с пониманием законов каждого из тайпкласов.

А с Traversable пиздец. Чувствую себя довеном. С написанием нетривиальных инстансов тоже проблемы.

А ещё прочитал, что Traversable вкатили относительно недавно, раньше не было. Но потом кто-то решил принести больше абстракции богу абстракции, что не всем в интернетах понравилось.

Нашёл вот туториал, о котором говорят, что простой, попробую покурить.
Аноним 09/05/17 Втр 20:00:21  987752
>>987751
туториал отклеился
http://blog.jakubarnold.cz/2014/07/30/foldable-and-traversable.html
Аноним 09/05/17 Втр 20:04:44  987759
>>987751
>цепочки IO вычислений перепаковать в одну IO цепочки
Плохо выразился, довен же.
Скорее имел в виду не перепаковку, а альтернативу функтору, применив который можно получить структуру IO-результатов, а альтернатива даёт структуру результатов внутри IO а внутре неонка.

Как пользовать я разглядел, а как понять - нет.
Аноним 09/05/17 Втр 20:09:03  987760
>>987759
Ну, то есть, перепаковать вывернуть наизнанку тоже можно, протраверсив применив id, но такой способ не выглядит нужным, если можешь сразу траверсить.
Аноним 09/05/17 Втр 23:24:05  987858
win.png (53Кб, 656x347)
>>987752
Вначале главы, посвящённой Traversable автор предлагает вместе с ним определить инстанс для списка.

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

Выбросил Prelude, минут 10 подумал и поколдовал внутри where импортируя по пути нужные функции и ... тадам, результат пикрилейтед.
Аноним 09/05/17 Втр 23:27:11  987863
14939943754400.jpg (160Кб, 480x479)
>>987858
Лишние импорты остались, лёл.
undefined, композиция и плюс.
Это я так работоспособность проверял
traverse ( (:[]) . (+1) ) [1,2,3]
Аноним 09/05/17 Втр 23:47:08  987889
neville-spits-1[...].PNG (379Кб, 627x338)
>>987858
Вот это я дебил, мог свой тайпкласс Trav ввести вместо того, чтобы Prelude выпиливать.
Аноним 10/05/17 Срд 01:09:33  987937
>>987858
Ну ты хорош, конечно, но нам Денчик это в спец-курсе рассказывал. Кидал выше соус на степик.
Аноним 10/05/17 Срд 01:31:30  987942
>>987937
Раз я уже начал по литературе, так и продолжу.

Слабо представляю, как перекатиться на степик, бросив то, что начал штоле? А курс Москвина сначала, или с момента, куда я по литературе дошёл?
https://www.youtube.com/watch?v=S9Nkfi_NLXI

Думаю, закончу то, что есть, а там посмотрим, мне ведь ничто не мешает ещё и курс Москвина поверх накатить. Тем более, те вещи, в которых разобрался с трудом, но сам, они лучше усваиваются.
Хотя с курсом непонятно. Там же, наверное, видео-лекции, а не бумажные. Как вообще на ютюбе учиться? Я только по книжкам умею.
Аноним 10/05/17 Срд 01:35:37  987943
traverse это просто mapM
только требует аппликатив вместо монады
Аноним 10/05/17 Срд 01:49:38  987945
>>987943
>mapM

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

А вот при изучении тайпкласса нужно же понять как он работает, чтобы уметь без проблем запилить его инстанс. Со всеми предыдущими тайплассами проблем не было вообще, а вот тут я завис, слишком дофига намешано. Но уже разобрался сам, и этим самим понял как там всё устроено.

Хотя, конечно, упростил я со списком. Foldable констрейнт в моей имплементации не нужен.
Я так понимаю, можна запилить дженерик-реализацию через фолдинг. Когда-нибудь я попробую и это говно. Наверное, завтра. Чувствую жопой что, если получится, это будет вообще эзотерический readonly код.
Аноним 10/05/17 Срд 11:26:57  988052
>>987945
>дженерик-реализацию через фолдинг. Когда-нибудь я попробую и это говно.

Какой же я всё-таки дурак. Ко-ко-ко, дженерик реализацию стыдно-то как
Сел пилить, и тут же понял, что мне чего-то, билять, не хватает. Моноида как минимум. Попробую придумать generic версию с дополнительными констрейнтами, но хуй у меня что выйдет.

Но через foldr невозбранно запилил пикрилейтед

Аноним 10/05/17 Срд 11:27:39  988053
fail.png (54Кб, 677x331)
>>988052
Блядь, отклеилось
Аноним 10/05/17 Срд 12:22:00  988079
monoidalwin.png (84Кб, 814x469)
>>988052>>988053
Так и знал, что можно запилить, добавив констрейнты Моноидальности и Аппликативности самого предполагаемого дженерик инстанса.
Невозбранно впилил использование дженерик функции в инстансе списка аппликатив и моноид же

Теперь, кажется, понял как работает Traversable. Вроде бы.

Пикрилейтед, короче.


Аноним 11/05/17 Чтв 05:36:30  988558
>>988079
А теперь проверь на соответствие monad laws. Подозреваю, где-то ты их нарушил, ибо traversable должен сохранять структуру при traverse, а monoid подразумевает свертку структуры в единичный итем.
Аноним 11/05/17 Чтв 05:36:53  988559
>>988558
Не monad, а traversable laws, конечно же.
Аноним 11/05/17 Чтв 05:39:13  988560
>>988558
Алсо если с английским проблем нет, рекомендую оригинальный paper по Traversable ("The Essence of the Iterator Pattern")
Аноним 11/05/17 Чтв 08:24:05  988602
>>988559
Проверил с помощью QuickCheck & Checkers, конечно.
Аноним 11/05/17 Чтв 08:34:06  988605
>>988558
По крайней мере соблюдается для тех моноидов, что я тестировал. Думаю, можно и разъебать. Но это не то чтобы серъезная функция, просто типоёбство, чтобы развить интуитивное понимание, в также я закрепил понимание Traversable.

Аноним 11/05/17 Чтв 10:34:10  988657
>>988558
Бля, а ведь пролопоушил у тебя самую писечку.

Моноид, тащемта, определяется ассоциативной операцией на множестве, имеющем identity элемент относительно этой операции.

Свёртываемость - это к Foldable, который, кстати, необходим для Traversable.
Аноним 11/05/17 Чтв 11:28:34  988681
Есть хаскелл для детей или хотя бы школьников?
Аноним 11/05/17 Чтв 12:20:01  988717
>>988681
Так хаскель и есть для школньиков.
Для его изучения достаточно знаний по алгебре за 8-9 класс.
Аноним 11/05/17 Чтв 12:22:18  988721
>>988717
Более того, кмк его легче учить чистым не изнасилованным ООП и императивщиной мозгом.
Аноним 11/05/17 Чтв 12:35:16  988726
>>988721
Ну императивщину полностью не вычеркнуть, даже в Haskell, если речь идёт по последовательных вычислениях, юзают do-нотацию, потому что так читать проще. А вот ООП действительно засирает мозги, и люди потом не могут понять как структурировать программы другими способами, пусть даже более выразительными.
Аноним 11/05/17 Чтв 12:38:32  988728
>>988726
Так do-нотация всего лишь синтаксический сахар для монад, и ничего императивного там нет, только порядок вложенности функций.
Аноним 11/05/17 Чтв 12:52:23  988730
>>988728
Всё так, но проще читать императивный синтаксис do-нотации, чем бесконечные вложения лямбд с >>= и >>.
Аноним 11/05/17 Чтв 13:00:09  988733
>>988730
Ну с таким же успехом let-нотацию и where- можно императивными назвать. Но спорить не стоит, в том, что это слегка напоминает императивный код, я согласен.
Аноним 12/05/17 Птн 13:31:23  989215
>>969781
Кинь книгу пожалуйста.
Аноним 12/05/17 Птн 15:54:23  989304
>>989215
https://gumroad.com/l/haskellbook
Аноним 12/05/17 Птн 18:09:59  989384
>>989304
Такой то шутничок. Но я нашел уже.
Аноним 14/05/17 Вск 18:23:47  990493
>>989384
Где взять?
Аноним 14/05/17 Вск 21:45:16  990652
>>990493
https://www.lumendatabase.org/notices/13247906
Аноним 14/05/17 Вск 23:11:04  990705
>>990652
как удобно!
Аноним 15/05/17 Пнд 02:07:41  990798
Чо мне делать в линуксах чтоб хацкель закомпилировался? Ну установил я haskell-platform на atom. А дальше куда?
Аноним 15/05/17 Пнд 09:33:02  990873
>>990798
Как поставил так и удали. Я сам наебался страшно, пока не выпилил платформу нахуй.

Поставь stack из репы, это всё, что тебе нужно. И читай как его использовать.
Аноним 15/05/17 Пнд 13:00:39  991004
Скажите, какой самый лучший/правильный подход к параллелизму в ФП?
Аноним 15/05/17 Пнд 14:14:50  991051
>>991004
Чистота языка
Аноним 18/05/17 Чтв 10:53:20  992616
Сап, хаскач. Как начать понимать что-либо в лямда-нотациях? Можно ли сигнатуру представлять в \-виде?
Аноним 18/05/17 Чтв 12:14:31  992646
>>992616
Так оно всё в таком виде. Просто сахарок повсюду.
Аноним 18/05/17 Чтв 12:39:02  992661
Где почитать всякую философскую муть по функциональному программированию, его развитию, перспективах и таком духе?
Аноним 18/05/17 Чтв 14:31:48  992730
>>992646
Извини за тупость и дерзость, но не мог бы ты помочь мне написать лямбда-нотации к следующим вещам или хотя бы на примере одной на пальцах объяснить принцип перевода в \-нотацию:

isPeriodic :: Library -> Bool

isPeriodic (Newspaper _ _ _ _) = True

getByMonths :: [Library] -> [Int] -> Int -> [Library]

findEq (x:xs) y = if x/=y then x:findEq xs y else x:xs
Аноним 18/05/17 Чтв 15:12:43  992754
>>992730
findEq = \(x:xs) -> \y -> if x/=y then x:findEq xs y else x:xs

Сигнатуры уже в таком виде.
Аноним 18/05/17 Чтв 15:36:46  992766
>>992730
В простейшем случае (a x₁ ... xₙ = b [x₁, ..., xₙ]) есть дериватная форма для абстракции (λ x₁ ... xₙ . a = b [x₁, ..., xₙ])
Аноним 18/05/17 Чтв 17:48:45  992856
>>992766
вернее a определяется как абстракция:
a = λ x₁ ... xₙ . b [x₁, ..., xₙ]
(но только в случае, когда x₁ ... xₙ - переменные и других клозов нет)
Аноним 20/05/17 Суб 10:54:33  993711
>>991051
Что выбрать из par/pseq, evaluate strategies, Par-monad, MVar, LVish? Что каноничнее?
Аноним 20/05/17 Суб 16:22:31  993817
>>993711
Судя по всему, ты путаешь parallelism и concurrency. Разберись для начала с этим, а дальше просто бери repa или accelerate.
Аноним 20/05/17 Суб 18:39:11  993879
>>993817
Ничего я не путаю. Мне нужен именно параллелизм. Все перечисленные подходы относятся к параллелизму в хаскеле.
Аноним 20/05/17 Суб 19:55:01  993912
>>993879
Особенно MVar, ага.
Аноним 22/05/17 Пнд 00:36:22  994521
Функциональный, разъясни пазязя почему этот код:

foldl (\x acc -> if (length x > length acc) then x else acc ) [] [[1],[2]]

выводит:
[2]

Должно же [1] выводиться.

http://rextester.com/EXN32250
Аноним 22/05/17 Пнд 01:09:52  994533
А, не, туплю, посмотрел доку еще раз - все правильно.
Аноним 24/05/17 Срд 13:31:01  995663
Почему при определении своего параметризованного типа, хаскель за меня создает функции от параметров?

data Person = Person { fisrtName :: String }

Main> :l test.hs
Main> :t firstName
firstName :: Person -> String

Что будет, как справляться, если мне нужно несколько типов с одинаковыми полями?
Аноним 24/05/17 Срд 20:03:08  995813
Бамп
Аноним 24/05/17 Срд 20:06:19  995818
>>981961
Блэт
гдэ бы столько времени взять чтобы книги годные прочесть. Сейчас дочитываю Learn you haskell for great good
Аноним 24/05/17 Срд 20:06:35  995819
>>995663
Потому что именно для этого и был придуман параметризованный тип, блядь.
data Person = Person String
если тебе не нужна функция, блядь.
Аноним 24/05/17 Срд 20:10:21  995822
>>995819
все понятно, спасибо

а что если так

data Person = Person String String String Int String Float
data Dog = Dog String String String String

как тут тогда человек разберется где какое поле? Комментарии подписывать? Но это же странно как то совсем.
Аноним 24/05/17 Срд 20:12:01  995826
>>995822
Для этого есть type
Аноним 24/05/17 Срд 20:12:53  995828
>>995822
>>995826
И newtype
Аноним 24/05/17 Срд 20:21:49  995848
>>995828
Благодарю
Аноним 24/05/17 Срд 20:24:53  995856
>>995848
Для именования полей обычно используют type.
newtype немного для других целей.
Аноним 24/05/17 Срд 20:25:09  995857
>>995856
Ну не для именования полей, а переименования типа.
Аноним 25/05/17 Чтв 00:00:36  995980
14931617106410.jpg (101Кб, 903x1200)
Хачкель вообще развивается?
GADT когда-нибудь добавят в ядро и поправят иерархию встроенных классов?
Аноним 25/05/17 Чтв 09:10:16  996066
>>995857
Да, как раз прочитал уже что type - создает алиас для существующих типов

data Person = Person PersonName PersonAge
type PersonAge = Int
type PersonName = String
Аноним 26/05/17 Птн 11:09:13  996495
>>995663
Для этого есть классы типов:

class FirsNameable a where getFirstName :: a -> String

newtype Person = Person String
-- или data Person = Person String

instance FirsNameable Person where getFirstName (Person x) = x

main = print $ getFirstName $ Person "Huirandomniy"
Аноним 26/05/17 Птн 12:08:11  996500
>>996495
Ну, или если хочется совсем красиво, то в итоге получится вот такой легкочитаемый, легкорасширяемый и легкодополняемый ad-hoc-полиморфный код c экзистенциальными типами:

{-# LANGUAGE ExistentialQuantification #-}

class FirstNameable' a where getFirstName :: a -> FirstName

type FirstName = String
type Age = Double
newtype Person = Person {getPersonFirstName :: FirstName}
data Seld' = Seld' {getSeld'FirstName :: FirstName, getSeld'Age :: Age}
data FirstNameable = forall a . FirstNameable' a => FirstNameable a

firstName (FirstNameable x) = getFirstName x

instance FirstNameable' Person where getFirstName = getPersonFirstName

instance FirstNameable' Seld' where getFirstName = getSeld'FirstName

gospodin = Person "Huirandomniy"
gospozha = Seld' "Pelotka" 40

main = mapM_ (print . firstName) [FirstNameable gospodin, FirstNameable gospozha]
Аноним 27/05/17 Суб 15:55:02  997037
>>969768 (OP)
Работаю с хаскелем, если есть вопросым задавайте.
Аноним 27/05/17 Суб 16:29:37  997051
>>997037
Как и за сколько времени освоился с всякими функторами, монадами и прочего из теории категорий?
Аноним 27/05/17 Суб 16:37:11  997053
какое отношение у хаскелистов к idris?
думаю вкатиться со скалы в хаскель или идрис
я правильно понимаю что идрис = хаскель + зав типы?
можно ли сразу начинать с идриса?
Аноним 27/05/17 Суб 16:37:30  997054
>>997037
насколько щедро плотют?
Аноним 27/05/17 Суб 21:26:57  997175
>>997051
В общих чертах ознакомился с языком, посмотрел пару примеров на гитхабе, сделал кой чего сам и все. Работаю и продолжаю изучать.
Взяли как раз из-за того что мало спецов на рынке.
>>997054
На житье-бытье хватает.
Аноним 27/05/17 Суб 21:32:59  997179
>>997175
какой город?
Аноним 27/05/17 Суб 22:48:06  997205
>>997179
NY
Аноним 28/05/17 Вск 10:53:11  997353
>>997205
замечал кстати что на хаскеле внезапно много перекатных вакансий в сша
Аноним 28/05/17 Вск 10:54:10  997355
>>997175
а до этого какой опыт? сеньор помидор 10 лет опыта опердней на эрланге?
Аноним 28/05/17 Вск 12:03:00  997376
>>997355
До этого админом работал и software developer С++
Аноним 28/05/17 Вск 14:00:18  997424
>>997037
безумно рад за тебя анон
Аноним 29/05/17 Пнд 10:20:12  997834
>>969768 (OP)
неужели есть реальные вакансии на хаскел дев в 2017? Может еще и аутсорс?
Аноним 29/05/17 Пнд 10:47:00  997846
>>981987
Нормальное ФП только в Хаскелле (из живых языков). Но если выбирать из F# и Скалы, я бы выбрал Скалу. F# сильно косит под ФП, поскольку спиздил синтаксис из Окамла, но по сути проект проприетарный с полудохлым комьюнити. Я не знаю на F# каких-нибудь продуктов уровня Спарка или Кафки, я вообще не знаю, нахуй F# нужен. Ну разве что какую-нибудь хуитку писать, убедив начальника, что C# - это не тру, а F# - тру, хотя разница между ними весьма небольшая (не такая, как между Скалой и Джавой, поэтому не представляю какие аргументы ты сможешь привести).

Скала, конечно, сделана с большим упором на ООП, но там более серьезная система типов, чем в F#, а вообще нормальная система типов - это одна из главных фич, ради которой ФП существует в принципе. На ней пилятся серьезные проекты, в которые вкладывается дофига бабла, на ней проще найти хорошую работу. Там в комьюнити полно настоящих ФП-шников, которые пришли туда из Хаскеля, с корорыми есть о чем поговорить и у которых есть чему поучиться.
Аноним 02/06/17 Птн 23:59:31  1000275
https://haskellweekly.news
Аноним 03/06/17 Суб 23:48:15  1000698
Изучаешь х-ль/п-т @ не понимаешь очередную йобу и чувствуешь себя тупым @ достигаешь просветления и чувствуешь себя продуктивным @ натыкаешься на очередную непонятную йобу.

Похоже, этот цикл никогда не закончится.
На этот раз я застопорился на cmap.
forall a b. (b -> a) -> f a -> f b
Как это добро использовать? Откуда я знаю, какой функцией получить a из b?
Аноним 04/06/17 Вск 08:46:28  1000762
>>1000698

newtype Predicate a = Predicate (a -> Bool)
instance Contravariant Predicate where
cmap f (Predicate g) = g . f
Аноним 04/06/17 Вск 12:52:42  1000800
>>1000762
Точно же! Маппинг работает для значений, контрмаппинг работает для стрелок. Как все просто.
Аноним 09/06/17 Птн 01:15:42  1003388
>Я не знаю на F# каких-нибудь продуктов уровня Спарка или Кафки

то что ты их не знаешь не означает что их не существует
https://blogs.msdn.microsoft.com/dotnet/2016/12/13/project-springfield-a-cloud-service-built-entirely-in-f/

jet.com алсо гугли
Аноним 09/06/17 Птн 01:18:34  1003392
http://fsharp.org/testimonials/ забыл
Аноним 09/06/17 Птн 01:50:06  1003400
>>1003388
Ты пару слов пропустил:
>того же уровня
Аноним 09/06/17 Птн 02:05:38  1003403
поработай для начала с кафкой, потом расскажешь какого она уровня
Аноним 11/06/17 Вск 07:23:25  1004317
>>994521
x и acc местами поменяй
Аноним 11/06/17 Вск 16:46:39  1004491
У нас были

data Item = Item { value :: Int, weight :: Int } deriving (Eq, Show)
data Problem = Knapsack Int [Item] deriving (Eq, Show)
data Solution = KnapsackSolution Int [Item] deriving (Eq, Show)

и решение задачи о рюкзаке с набором без ограничений в виде

dpKnapsackUB :: Problem -> Int
dpKnapsackUB (Knapsack capacity items) = trace (show table) (table ! capacity) where
table = array (0, capacity) [(w, opt w) | w <- [0..capacity]]
opt 0 = 0
opt w = maximum $ 0:[value i + table ! (w - weight i) | i <- items, weight i <= w]

Не то чтобы это было нормальное решение, но когда решил ещё возвращать список элементов попавших в рюкзак, становится трудно остановиться. Единственное, что вызывало у меня опасение - это монады и Trace / State / whatever. Я знал, что рано или поздно мы перейдем и на эту дрянь.

Анон, подскажи, у меня есть шанс отрефакторить функцию в
dpKnapsackUB' :: Problem -> Solution?
Аноним 16/06/17 Птн 19:15:30  1007175
Кто читал книгу Холомьева?
https://anton-k.github.io/ru-haskell-book/book/5.html#упражнения
Упражнение в пятой главе.

Рассмотрим такой тип:

data St a b = St (a -> (b, St a b))

Этот тип хранит функцию, которая позволяет преобразовывать потоки значений. Определите функцию применения:

ap :: St a b -> [a] ->

Она принимает ленту входящих значений и возвращает ленту выходов.

Что тут надо сделать? Вроде речь про потоки, которые мы сами до этого делали, но тут ap принимает и выдает просто списки. Ну да ладно, они могут быть бесконечными. Я вроде сделал ap и функцию изменеия списков для теста, которая берет поток и прибавляет 1 к каждому значения в новом потоке.

ap::St a b -> [a] ->
ap (St f) (x:xs) = fst (f x) : ap (St f) xs

myf::Int -> (Int, St Int Int)
myf a = (a + 1, St myf)

Но нахуя эту функцию оборачивать в St a b. Я тут поразмышлял и понял, что она выдает в результате кортеж, с самой собой. Ок, без St функия не может иметь в результате саму себя, наверное. Но об этом тут никакой речи нет. И приходиться из кортежа вытаскивать первое значение, а возврат самой себя нафиг не нужен. Я чего-то не понимаю точно.
Аноним 17/06/17 Суб 15:18:59  1007487
Блять, хуле же так сложно то с этой вашей теорией категорий. Пытаюсь высрать реализацию Foldable для двоичного дерева. Мозги скрипят, пиздец.
Аноним 17/06/17 Суб 17:46:45  1007543
>>1007487
Ты почти постиг дзен. Теперь осталось ответить на один простой вопрос - зачем? Зачем все это? Как это приближает тебя к решению конкретной задачи?
Аноним 17/06/17 Суб 17:55:06  1007547
>>1007487
>реализацию Foldable для двоичного дерева
А как ты для этого используешь теорию категорий?
Аноним 17/06/17 Суб 19:28:07  1007588
>>1007543
Упражнение в книжке. Приближает к возможности практического применения инструмента.
>>1007547
Никак. Просто пришел на двачи поныть о том что сложна.
Аноним 17/06/17 Суб 21:14:55  1007668
Что скажете за purescript? Кто пользовался для реальных проектов?
Аноним 18/06/17 Вск 18:37:07  1007997
Обязательно ли знать наизусть все моноиды, функторы, и прочее для того чтобы писать продакшн код?
Аноним 18/06/17 Вск 23:09:08  1008143
2017-06-18-2308[...].png (37Кб, 599x298)
>>1007668
Ну котятки, что, совсем никто?
Аноним 19/06/17 Пнд 02:10:33  1008185
>>1004491

>Единственное, что вызывало у меня опасение - это монады

А зря. Кто умеет в монады, тот длинные list comprehensions в одну строку не пишет.

>Анон, подскажи, у меня есть шанс отрефакторить функцию в
>dpKnapsackUB' :: Problem -> Solution?

Внезапно да. Например вот так:

--import Control.Monad (guard)

data Item = Item { value :: Int, weight :: Int } deriving (Eq, Ord, Show)
data Problem = Knapsack Int [Item] deriving (Eq, Show)
data Solution = KnapsackSolution Int [Item] deriving (Eq, Ord, Show)

dpKnapsackUB' :: Problem -> Solution
dpKnapsackUB' (Knapsack capacity items) = table ! capacity
  where table = array (0, capacity) [(w, opt w) | w <- [0..capacity]]
        empty = KnapsackSolution 0 []
        opt 0 = empty
        opt w = maximum . (empty :) $ do
            --i <- items
            --guard $ weight i <= w
            i <- filter ((<= w) . weight) items
            let KnapsackSolution optVal optItems = table ! (w - weight i)
            return $ KnapsackSolution (value i + optVal) (i : optItems)

Выведенный Ord на типах позволяет не писать maximumBy с разбором кортежей или похожую хуйню. Про guard можешь прочитать в доках к Control.Monad. Я сначала написал с ним, но потом подумал, что лучше не добавлять лишних модулей просто так.
Аноним 19/06/17 Пнд 02:47:20  1008188
>>1007175

>Но нахуя эту функцию оборачивать в St a b
Чтоб задать тип, в котором он же сам и используется, очевидно же.

>а возврат самой себя нафиг не нужен
Тащемта нужен. Тебе там предлагают написать integral :: Num a => St a a, который выдаёт "ленту" частичных сумм. А для этого надо помнить предыдущую частичную сумму, ведь к ней надо будет прибавлять текущий элемент. Так вот, для этого функция внутри St должна уметь изменять не только свой аргумент, но и саму себя. Именно новую версию самой себя, которую надо будет применить к следующему элементу, она и возвращает вторым элементом кортежа, который ты выкидываешь.

Функцию f :: St a b, которой не нужно себя изменять (применяемую поэлементно, подобно map g :: [a] -> для списков) при этом можно будет получить как f = lift f' для некоторой f' :: a -> b. Попробуй написать lift :: (a -> b) -> St a b, который это делает — с ним можно будет "поднимать" обычные функции до функций над потоками, легко написать const :: a -> St b a и проверить тот же ap :: St a b -> [a] -> на конкретных примерах.
Аноним 19/06/17 Пнд 02:52:26  1008190
>>1008188

>>map g :: [a] ->
map g :: [a] -> [b]

>>ap :: St a b -> [a] ->
ap :: St a b -> [a] -> [b]

Макаба съела [b].
Аноним 19/06/17 Пнд 13:34:02  1008297
>>1008188
Вот спасибо, кажется начинаю понимать.
Но жаль что сам не мог допереть до понимния. Или все таки слишком недостаточное описание в упражнениях.
Аноним 19/06/17 Пнд 19:15:39  1008439
>>1008190
Охуеваю с вашего кода.

мимопроходил
Аноним 19/06/17 Пнд 19:36:14  1008445
>>1008439
В данном случае это не код, а аннотация типа.
Аноним 20/06/17 Втр 13:27:27  1008702
>>1008297
Хорошие задачки. Тоже изучаю хаскель. Давай делиться решениями тут. Мое на ideone:

http://ideone.com/ivPNU3
Аноним 20/06/17 Втр 13:36:31  1008707
Снимок.PNG (87Кб, 1249x627)
Поясните-ка мне за библиотеку Morte https://github.com/Gabriel439/Haskell-Morte-Library это что же, на вашем хачкеле Calculus of Constructions запилена?
Аноним 20/06/17 Втр 14:59:36  1008786
>>1008702
Игрался с потоками и придумал еще одну задачку. Написать функцию взятия производной от потока, такую, что

derivative :: Num a => St a a

(derivative . integral) == (integral . derivative)

Если сделать, то можно моделировать, например, всякие замкнутые электрические контуры.
Аноним 20/06/17 Втр 17:18:43  1008830
>>1008702
В принципе у меня примерно так же получилось, только конструкции не такие локаничные, я нуб.
За исключением id в инстансе для Category St. Я не врубаюсь в него никак и не могу понять почему он реализуется так в данном случае (я сделал что-то другое и оно не работает как надо). Кажется, что все просто, он просто берет что-то и возвращается то же самое. В данном случае это экземпляр для St и он должен принимать St, хотя он не принимает никаких аргументов, а является константой, это я тоже не очень четко понимаю.

В твоих тестах следующее
ap (integral . id) [0,1,2]
Как оно работает? Ведь в ap эта композиция принимает элементы листа? То есть сначала берется 0 и к нему применяется id, который должен брать/быть что-то типа St, то есть функцию.
Аноним 20/06/17 Втр 17:36:32  1008837
>>1008830
Я так начинаю понимать, что id сам является функцией типа St, которая работает как обычный id для элементов листа.
А если применить id к чему-то с типом St, то что будет. Или оно так не должно применяться..
Аноним 20/06/17 Втр 21:37:02  1008931
>>1008830
>и он должен принимать St
Сам по себе он ничего не принимает (элементы в него суёт ap), он является как бы "обёрткой", для которой ты можешь определять классы типов. Когда нужна функция - "распаковываешь" (сопоставлением по образцу) и работаешь с ней. Для таких случаев ещё newtype есть и record syntax, чтобы "распаковывать" можно было и специальной функцией, и образцами. Например:

newtype St a b = St { getSt :: a -> (b, St a b) }

getSt "распаковывает", St "запаковывает". В стандартной библиотеке есть несколько примеров вроде ZipList из Control.Applicative. Это "обёртка" над списком, которая позволяет задать ещё одну реализацию класса Applicative, не конфликтуя с реализацией Applicative из Prelude.

>Как оно работает?
Если ты про (.), то там та же идея, что и для функций, только с учётом второго элемента (новой St, которую надо применять к следующему элементу). Текущий пропускается сначала через (распакованную) g, потом через (распакованную) f, а в качестве новой St для результата композиции будет взята (наша) композиция новой St для f (обозначенной через f1) и новой St для g (обозначенной через g1).

>>1008837
>А если применить id к чему-то с типом St, то что будет. Или оно так не должно применяться..
То же самое и будет, к чему применил. id задан в классе типов, т.е. реализация его выбирается в зависимости от требуемого типа. Ты его применяешь => тебе нужна функция => выбирается реализация для функций. Если не импортировать Control.Category, то будет id из Prelude, который всегда является функцией.
Аноним 20/06/17 Втр 21:57:16  1008943
>>1008786
Хорошая задачка, даже Applicative пригодился.


derivative :: Num a => St a a
derivative = f 0
    --where f n = St $ \x -> (x - n, f x)
    where f n = St $ (,) <$> subtract n <*> f

Аноним 21/06/17 Срд 12:05:42  1009132
>>1008830
>это я тоже не очень четко понимаю.

Я не понимаю с точки зрения теории категорий. С ней знаком поверхностно. С этой точки зрения St образует категорию, в которой объектами являются еще и сами морфизмы, но возможно ли такое - не знаю.

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

id с этой точки зрения работает так. В инструкции написано: верни сам объект, в следующий раз используй эту же инструкцию. Исполнитель ap это и делает.

>Как оно работает? Ведь в ap эта композиция принимает элементы листа?

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

>>1008943
Так же получилось, как в закомментированной строчке.
Аноним 22/06/17 Чтв 15:14:49  1009970
Как написать quicksort на хаскеле таким же быстрым, как на C или C++?
Аноним 22/06/17 Чтв 15:57:26  1009987
>>1009970
Главное препятствие - runtime system, реализующая семантику аппликативных вычислений на тьюринг-архитектуре.
Самый разумный способ - взять C/C++
вместо хаскеля
.
Аноним 22/06/17 Чтв 16:32:44  1010005
>>1009987
Изменяемые данные (без создания копии) в хаскеле никак невозможны?
мимобайтоеб
Аноним 22/06/17 Чтв 16:40:08  1010010
>>1010005
На анбоксед векторах разве что
Аноним 22/06/17 Чтв 22:13:07  1010201
>>1009970
http://hackage.haskell.org/package/vector-algorithms-0.7.0.1/docs/src/Data-Vector-Algorithms-Merge.html#sort
Аноним 23/06/17 Птн 09:53:07  1010348
>>987751
Тоже нихуя не понятно.
> :t traverse
traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
> :t id
id :: a -> a
И внезапно
>:t traverse id
traverse id :: (Traversable t, Applicative f) => t (f b) -> f (t b)

Как id можно запихать в traverse, оно же по типу не подходит?
Аноним 23/06/17 Птн 09:55:37  1010349
>>1010348
a и f b это тот самый тип
Аноним 23/06/17 Птн 09:56:41  1010351
>>1010348
Стоило только спросить на двачах, как сразу снизошло озарение, лол. Если a :: f b
Аноним 23/06/17 Птн 09:57:11  1010352
>>1010349
Один и тот же в смысле
Аноним 23/06/17 Птн 09:58:19  1010353
А на пикрелейтед что скажите? purescript
Попробуйте вызвать traverse с id.
Аноним 23/06/17 Птн 23:05:52  1010668
>>1010353

Спросим, нафиг тебе функция, принимающая Traversable и ни на что не влияющий аргумент и заменяющая каждый элемент на const "shit". Или это пример, когда у тебя в итоге получается (Traversable t, Applicative f) => t (f a), на котором сработает traverse id?
Аноним 23/06/17 Птн 23:38:20  1010683
Как в purescript-free-canvas выполнять произвольные действия?
Аноним 25/06/17 Вск 23:19:26  1011733
>>1010683
Что такое "произвольные действия"?
Аноним 27/06/17 Втр 20:43:19  1012598
>>1011733
Наверное он имеет ввиду побочные эффекты.
Аноним 27/06/17 Втр 20:54:55  1012614
>>1012598
Думаю он имел ввиду https://github.com/paf31/purescript-free-canvas/issues/1
Но я по прежнему не понимаю что за "arbitrary actions".
Аноним 28/06/17 Срд 13:20:34  1012889
Реквестирую годный туториал про monad transformers
Аноним 05/07/17 Срд 15:15:37  1016917
Как дебажить хачкель?
Аноним 05/07/17 Срд 15:18:10  1016918
>>1016917
GHCI и Debug.Trace
Аноним 05/07/17 Срд 15:22:39  1016922
>>1016918
А можно пример для ленивых?
Аноним 05/07/17 Срд 15:47:07  1016936
>>1016922
https://downloads.haskell.org/~ghc/8.0.2/docs/html/users_guide/ghci.html#the-ghci-debugger
Аноним 05/07/17 Срд 16:45:05  1016966
5TfCGR1EdYc.jpg (79Кб, 730x730)
>>1016936
Добра.
Аноним 05/07/17 Срд 17:06:33  1016976
Недавно имел незащищенный контакт с вебдевелопоментом в редукасе-реакте. Теперь хочу функционироваться. Стоит ли изучать Кашель? Кто использует в продакшене? Что есть в Кашеле чего нет в Йобаскрипте2015-2017?
Аноним 05/07/17 Срд 18:26:45  1017021
>>1016976
Встань на истинно верный путь: http://www.purescript.org/
Аноним 05/07/17 Срд 19:59:34  1017066
Что такое монады и системы эффектов и чем они отличаются?
Аноним 06/07/17 Чтв 02:43:17  1017259
>>1016976
>Кто использует в продакшене?
Standard Chartered
Standard & Poor's
J.P. Morgan
Facebook
Target
Аноним 06/07/17 Чтв 09:43:09  1017309
Есть какой-то MOOC пол алгоритмам/структурам данных на *ML-языке, но я проебал ссылку, поделитесь.
Аноним 06/07/17 Чтв 10:42:39  1017322
>>1017066
Монада - это моноид в категории эндофункторов. Системы эффектов - вычислители, производящие неявную работу, связанную с изменением окружения.
Аноним 08/07/17 Суб 07:32:34  1018516
насколько нужен матан чтобы писать на Хачике?
Аноним 08/07/17 Суб 07:33:16  1018517
>>1018516
насколько нужен хачик, чтобы писать на матане?
Аноним 08/07/17 Суб 10:56:00  1018542
>>1018516
Нинужен совсем. Даже теоркат не нужен.
Аноним 08/07/17 Суб 13:36:52  1018613
>>1018516
Чот мне кажется, что Idris попроще хаскелла в плане необходимого матана.
Аноним 08/07/17 Суб 18:47:30  1018800
>>1018516
Если говорить сугубо языке программирования, то никакое знание математики кроме разве школьного для хаскеля не нужно.
Математику (не мат анализ наверное имеется ввиду?) в принципе неплохо понимать чтобы писать хорошие алгоритмы, с другой стороны если голова на месте, то можно интуитивно понять что алгоритм не оптимален, иногда он очевидно не оптимален. Но тут на мой взгляд достаточно просто в теорию алгоритмов окунуться.
Аноним 12/07/17 Срд 02:00:30  1021705
Есть один вопрос по Idris, думаю ничего если задам его здесь.
Когда я пытаюсь выполнить
sum [1..1000]
отедается гиг памяти в все зависает. На сколько это ожидаемое поведение? 1.0 под windows.
Аноним 12/07/17 Срд 03:18:07  1021713
>>1021705
> The REPL uses recursively defined peano nats
Аноним 12/07/17 Срд 04:17:05  1021717
>>1021713
> peano nuts
Аноним 12/07/17 Срд 10:11:39  1021773
>>1021705
Посчитай как-то так: 1000(1000+1)/2
Аноним 12/07/17 Срд 16:41:19  1021977
У меня есть стейт для галлерии. Индекс текущей пикчи и общее кол-во.
Нужно написать две функции, которые будут это дело инкрементить.
Что-то умнее
> if x + 1 > total then shit else fuck
можно придумать?
Аноним 13/07/17 Чтв 21:24:01  1024407
Поясните за аппликативные функторы. Я понимаю как они работают, но не могу понять в каких случаях они полезны ирл.
Аноним 13/07/17 Чтв 21:56:58  1024462
>>980926
У скалы охуенный синтаксис, бич. Когда пердолил Сикп и ебался с лиспом чувствовал, что мне нужно что-то вроде скалы
Аноним 14/07/17 Птн 09:47:27  1024724
>>1021977
>Что-то умнее
Завернуть всё в альтернативный функтор и получится что-то типа:
nextIndex <*> shit <|> fuck
Аноним 14/07/17 Птн 11:50:53  1024778
>>1024407
Все вычисления в функторах сводятся к тому, что надо что-то постоянно упаковывать-перепаковывать. Applicative делает это за тебя, liftAx избавляет от синтаксического шума, а программизд сосредотачивается только на самих вычислениях.

сравни:
justPlus x y = pure (+) <> x <> y
или
justPlus' = liftA2 (+)

С этим:

justPlus'' (Just x) (Just y) = Just (x + y)
justPlus'' _ _ = Nothing

Заметь, что первые две полиморфны, и можно их юзать вообще для всех Applicative: вдруг задача потребует реализовать ту же функциональность на другом контейнере, или захочется его сменить.
Аноним 14/07/17 Птн 13:01:28  1024818
>>1024778
Я все понимаю на уровне тупорылых примеров типа Just 2 + Just 3
Мне не понятно практическое применение этого.
Почему я должен захотеть использовать это вместо do нотации с монадами, например.
Аноним 14/07/17 Птн 13:19:24  1024827
>>1024818
Нету причин. Монады строго мощнее аппликативных функторов
Аноним 14/07/17 Птн 14:31:40  1024862
>>1024827
Но я почему то вижу дохуя апи построенных на них. НИПОНЯТНО.
Аноним 14/07/17 Птн 15:30:39  1024910
>>1024862
значит для апи достаточно только аппликативных функторов же
Аноним 14/07/17 Птн 15:33:05  1024911
>>1024910
http://purescript-pux.org/docs/routing/
Вот чому они тут сделали через сфинктеры, а не через монадки? Как бы это вообще сделать через монадки?
Аноним 14/07/17 Птн 15:53:14  1024923
>>1024911
PageView $ fromMaybe NotFound $ router url $
(do
end
pure Home)
`mplus`
(do
lit "users"
s <- param "sortBy"
end
pure $ Users s)
`mplus`
(do
lit "users"
end
pure $ Users "name")
`mplus`
(do
lit "users"
i <- int
end
pure $ User i)
Аноним 14/07/17 Птн 15:56:14  1024924
>>1024923
Вай-вай, что ты делаешь, прекрати. Скобки же не завезли. Залей куда-нибудь, будь человеком.
Аноним 14/07/17 Птн 16:02:47  1024930
>>1024818
>>1024862
Не всякий аппликативный функтор может стать монадой. Попробуй полифть в монаду вот такую функцию f :: a -> a -> a

Из аппликативных функторов легко можно составить композицию, из монад - нетда, Monad transformers.
Аноним 15/07/17 Суб 11:52:32  1025354
>>1024930
Можешь пояснить на пальцах, что такое free monad?
Аноним 15/07/17 Суб 12:08:34  1025356
>>1025354
> на пальцах
data type, который из любого функтора делает монаду, складывая последовательность значений в список.
Аноним 15/07/17 Суб 14:43:31  1025401
>>1025356
Юз кейсы?

Скажем я прекрасно владею рекурсией, понимаю когда можно использовать фолды и даже всякие foldM.
Более менее понятно когда нужны монады.

Но вот интуиции на счет do нотации мне не хватает. Я понимаю что если развернуть do нотацию то получится цепочка лямбд связанных через >>=, что позволяет использовать в последующих вычислениях все что было в предыдущих. Но я немножко не догоняю кто же все таки запускает вычисления.
Аноним 15/07/17 Суб 14:58:48  1025407
>>1025401
>Но я немножко не догоняю кто же все таки запускает вычисления.
Если говорить про IO, то вычисления "запускает" рантайм GHC.
В остальных случаях по разному. Если например монада - список, то на выходе и получается список, а дальше делай с ним что хочешь.
Разберись для начала с монадами, потом с трансформерами, а дальше Free на ура пойдет
Аноним 15/07/17 Суб 15:35:17  1025417
>>1025407
Да я вроде все понимаю на уровне теории. Понимаю как пользоваться библиотекой, которая построена на монадах. А когда дело доходит до практики, то не возникает желания "А въебу ка я тут монаду".

Трансформеры тоже не очень не понимаю. Я же могу смешивать в одной цепочки do скажем Maybe и log. Но log идет как бы сбоку в виде сайд эффекта. Получается трансформеры нужны чтобы сделать Maybe + Reader например?
Аноним 15/07/17 Суб 15:49:09  1025421
Реквестирую видосов по теории категорий.
Аноним 15/07/17 Суб 16:02:29  1025425
>>1025421
даже не думай
Аноним 15/07/17 Суб 16:09:11  1025429
>>1025425
Чому?
Аноним 16/07/17 Вск 00:15:31  1025676
>>1025421
В общем подсел на усатика: https://www.youtube.com/watch?v=I8LbkfSSR58
Аноним 17/07/17 Пнд 08:49:30  1026343
>>1025417
>не возникает желания "А въебу ка я тут монаду"
Да тут просто надо смотреть на задачу. Есть цепочка однотипных вычислений - юзай анфолд-фолд. Есть у этих вычислений побочные эффекты, порядок которых важен - юзай аппликативный функтор. Важен и порядок вычислений, и эффектов - заверни в монаду.

>Я же могу смешивать в одной цепочки do скажем Maybe и log
Можешь смешивать любые монады и без монадных трансформеров. Но при этом тебе придется вручную комбинировать-разбирать их, а bind сделает это за тебя.
Аноним 31/07/17 Пнд 22:28:23  1035152
Ньюфаг ИТТ. ЧЯДНТ?
data Single_Multiple a = Multiple Int a | Single a deriving (Eq, Show)
mod_length_enc :: (Eq a) => [a] -> [Single_Multiple a]
mod_length_enc xs = [ \(x,y) -> if x==1 then Single y else Multiple x y | (x ,y) <- Lists1.length_enc xs]
Lists1.length_enc возвращает список пар (1, "a")(2, "b") и т.д.
Ошибка:
• Couldn't match expected type ‘Single_Multiple a’
with actual type ‘(Int, a0) -> Single_Multiple a0’
• The lambda expression ‘\ (x, y) -> ...’ has one argument,
but its type ‘Single_Multiple a’ has none

Притом, если сделать так:
mod_length_enc xs = [ f | (x,y) <- Lists1.length_enc xs, let f = if x==1 then Single y else Multiple x y]
то все работает. Почему?
Аноним 01/08/17 Втр 12:46:39  1035424
>>1035152
> \(x,y) -> if x==1 then Single y else Multiple x y
Это имеет тип (Int, a) -> Single_Multiple a

> f
Это имеет тип Single_Multiple a, это не функция
Аноним 01/08/17 Втр 22:04:43  1035749
Поясните за continuations на пальцах. С меня нихуя.
Аноним 02/08/17 Срд 08:58:35  1035924
>>1035424
Вроде дошло, спасибо. Тупанул. Лямбда только определяет, а не вызывает функцию. Получается, let - это что-то типа макроса в C?
Аноним 03/08/17 Чтв 15:44:10  1036815
Покажите, кто-нибудь, как в хаскеле выглядят замыкания.
Все вокруг твердят, что замыкания относятся к ФП, но я их никогда не встречал в хаскеле. Из ФП знаю только хаскель
Аноним 03/08/17 Чтв 15:52:56  1036829
>>1036815
Да так же как и везде. Замыкания просто напросто дают доступ к лексической (читай визуально видимой) обласит видимости.
http://paste.org.ru/?fxi7za
Лямбда которая возвращается из функции tag умеет пользоваться переменными open и close из своего замыкания.
Аноним 03/08/17 Чтв 16:21:19  1036867
>>1036829
А в чём 'глубокий смысл' таких 'замыканий'?
Аноним 03/08/17 Чтв 16:28:40  1036894
>>1036829
Никогда бы не подумал, что where или let -конструкции кто-то называет замыканиями.
Смысл замыканий, насколько я это понимаю, совсем не в этом.
Аноним 03/08/17 Чтв 16:28:47  1036895
>>1024462
>ебался с лиспом
Сейчас бы с лиспом ебаться, он прост как дважды два.
Аноним 03/08/17 Чтв 16:34:58  1036906
>>1036867
В том что тебе не нужно пихать аргументы во вложенные вспомогательные функции. Или как в примере создавать частично готовые функции.
> Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своём контексте.
Аноним 03/08/17 Чтв 16:35:48  1036909
>>1036894
Замыкание это лямбда, которая возвращается. А where или let позволяют этой лямбде стать замыканием.
Аноним 03/08/17 Чтв 17:10:50  1036970
>>1036906
Но в хаскеле переменные не объявляются (а значит, не могут быть вне функции), и ни на что не ссылаются. Все переменные - это и есть только лишь параметры функций.
Замыкание призвано решить проблему фунарга -
захвата переменных в языках, где переменная ссылается на ячейку памяти (время существования которой может не соответствовать времени вызова функции/процедуры) и аргументы передаются через стек. То есть, замыкания имеют смысл в императивном программировании. Я не понимаю, какой смысл замыкания могут иметь в ФП объясните, плз
То, что у тебя - это просто вложенные определения функций.
Аноним 06/08/17 Вск 23:04:22  1039615
>>977793
emacs
Аноним 09/08/17 Срд 18:14:36  1041503
>>1008143
Аноны, что за хуйня на пике? Похоже на хачкель, но как-то всё императивно слишком. И если хаскель, то нахуй писать на нём так?
Аноним 09/08/17 Срд 18:23:40  1041507
>>1041503
Это purescript, который похож на хаскель как две капли воды, только конпелится в жс дристню.
То что тебе кажется "императивным" на самом деле просто синтаксический сахар над bind и это нормальная практика.
Аноним 09/08/17 Срд 18:41:15  1041520
>>1041507
Есть какой-нибудь фреймворк на нем?
Аноним 09/08/17 Срд 18:43:42  1041522
>>1041520
Ага, целых джва. halogen от конторы которая его юзает в проде и pux, от одной тян помешанной на понях.
Пробовал второй, мне понравилось.
Аноним 09/08/17 Срд 19:31:39  1041556
ac3452726[1].jpg (14Кб, 200x327)
>>1041522
>от одной тян помешанной на понях
Лоля?
Аноним 09/08/17 Срд 22:06:58  1041624
>>1041556
https://avatars0.githubusercontent.com/u/17880?v=4&s=400
Аноним 09/08/17 Срд 22:19:49  1041629
Смотрите что нашел, пока гуглил haskell from principles
https://github.com/bitemyapp/learnhaskell
Аноним 09/08/17 Срд 22:22:15  1041631
>>1041556
>>1041624
Няшный трапик.
Аноним 10/08/17 Чтв 10:44:51  1041807
>>1041624
И зачем нужен этот ваш хотт?
Аноним 10/08/17 Чтв 10:45:53  1041809
image.png (261Кб, 1354x656)
>>1041631
Аноним 10/08/17 Чтв 23:02:40  1042219
>>1018800
>Если говорить сугубо языке программирования, то никакое знание математики кроме разве школьного для хаскеля не нужно
А как же лямбда-исчисление и теория типов?
Аноним 10/08/17 Чтв 23:06:21  1042220
>>1042219
Кстати, о лямбдах. Попытался написать вычисление факториала через Fix, сломал мозг. Это я такой тупой или это норма?
Аноним 11/08/17 Птн 00:21:36  1042252
>>1042220
А что сложного-то? Логика простая и такая же как в обычном факториале.

fix (\rec -> \n -> if n == 0 then 1 else n * rec (n-1))

Фикс просто нужен потому, что если бы мы делали простую лямбду, то

(\x -> if x == 0 then 1 else СУКА)
А фикс просто принимает как аргумент ещё и фунуцию.
Аноним 11/08/17 Птн 00:45:53  1042260
>>1042220
Если сильно сложно пробуй итеративно подходить к вопросу:

let factor n = if n == 0 then 1 else n factor (n - 1)

let factor' = \n -> if n == 0 then 1 else n
factor' (n - 1)

fix (\factor n -> if n == 0 then 1 else n * factor (n - 1))

Просто поэтапно переноси.
Аноним 11/08/17 Птн 11:41:32  1042455
>>1042219
Так обычно в учебнике где-то в начале и объясняют.
Аноним 11/08/17 Птн 16:40:50  1042615
>>1042252
>>1042260
>>1042455
Все так, но я пытался самостоятельно проделать все шаги бета-редукции, и запутался в том, что куда подстанавливать. Попытался применить индексы де Брауна, стало только хуже. А суть-то я понял, Y работает по тому же принципу, что и Ω, который совсем простой.
Аноним 12/08/17 Суб 16:50:21  1043202
https://people.mpi-sws.org/~dreyer/tor/papers/wadler.pdf
Объясните мне тупому, в чем там вся соль?
Аноним 13/08/17 Вск 18:36:10  1043918
14980736964670.jpg (77Кб, 375x500)
14882111179020.png (197Кб, 424x600)
Господа джиниусы, я не кодер, для хобби решил попробовать поизучать хаскелл, для разнообразия жизни.

Какого чёрта на Eclipse не устанавливается он? Вернее, были ли у вас проблемы с установкой на эклипс этого плагина?

просто пишет

The selected wizard could not be started.
Plug-in net.sf.eclipsefp.haskell.ui was unable to load class net.sf.eclipsefp.haskell.ui.wizards.NewHaskellProjectWizard.
An error occurred while automatically activating bundle net.sf.eclipsefp.haskell.ui (247).


Я понимаю, что это уже начинается отсеивание глупцов, вроде меня. Но я всё делал по инструкции. Были ли у вас такие проблемы?
Аноним 13/08/17 Вск 18:48:18  1043937
>>1043918
И да, в гугле есть одно единственное упоминание этой ошибки. И индус, который пытается с ней разобраться, не решает эту проблемку.
Аноним 14/08/17 Пнд 19:01:59  1044561
>>1043918
Эклипсом никто не пользуется уже.
Аноним 15/08/17 Втр 07:48:18  1044751
>>1044561
а чем тогда пользуются?
Аноним 15/08/17 Втр 08:15:30  1044755
>>1044561
на шинде. просто хер разберёшь, где эти модули все.
Аноним 15/08/17 Втр 09:06:24  1044769
>>1044751
spacemacs
Аноним 15/08/17 Втр 13:06:29  1044833
>>970872
>Абелевая группа
коммутативная группа, но её в хаскеле не имплементировали
Аноним 15/08/17 Втр 14:55:05  1044881
Хочу спросить: насколько часто в коде на хаскелл после проведения отладки встречаются ошибки? Реже чем в ООП и императивных языках или также часто?
Аноним 15/08/17 Втр 15:16:06  1044888
>>1044881
реже
Аноним 15/08/17 Втр 15:19:26  1044890
>>1044888
Двачую реже. Вместо этого ты дольше пытаешься сделать чтобы код сконпелился.
Аноним 15/08/17 Втр 15:27:08  1044891
Еще вопрос: когда пишется код алгоритма практически без использования дополнительной памяти(O(1) по памяти) то на хаскелле все равно используется стек для каждой итерации алгоритма и из-за этого алгоритм выполняется на константу медленнее, хотя ассимптотическая оценка времени выполнения та же, так?
Аноним 15/08/17 Втр 15:31:06  1044893
>>1044891
Гугли TCO
Аноним 15/08/17 Втр 16:08:31  1044924
>>1044893

А если не хвостовая рекурсия, а к примеру набор данных меняется: есть массив чисел, мы итерируем по нему, считаем сумму элементов и прибавляем промежуточное значение суммы к текущему элементу.

Хаскелл выделит новую память для результата вычислений или воспользуется старой?

Вообще есть случаи когда хаскелл использует больше ресурсов и времени чем императивный язык? Или его свободно можно применять в примеру для системного программирования?
Аноним 15/08/17 Втр 16:38:20  1044951
>>1044924
Конечно есть. Например foldl/foldr на списках ведут себя по разному.
Аноним 15/08/17 Втр 20:52:16  1045081
>>1044751
Лично я — vscode.

По твоей ошибке гугл выдает беседы от 2006 года. На гитхабе в ридми репы плагина написано что проект больше не поддерживается.
Аноним 17/08/17 Чтв 14:38:13  1045862
Реквестирую видос живой разработки на хачкеле с комментариями. Типа такого: http://www.parens-of-the-dead.com/
Аноним 18/08/17 Птн 18:00:46  1046394
https://www.youtube.com/watch?v=ZR3Jirqk6W8
Аноним 18/08/17 Птн 18:27:07  1046410
https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours
Аноним 18/08/17 Птн 18:27:29  1046411
>>1046410
Кто-нибудь читал?
Аноним 18/08/17 Птн 20:08:57  1046467
Screenshot2017-[...].png (37Кб, 217x179)
>>1046394
Примерно так я себе и представлял программистов на математических языках.
Аноним 18/08/17 Птн 21:29:33  1046496
>>1046467
Жутко похож на маскот GOlang
Аноним 18/08/17 Птн 22:01:38  1046506
>>1046467
>Haskell
>математический язык
Ок. Если что, там из теории категорий только названия позаимствовали, так пафосней
Аноним 18/08/17 Птн 22:31:39  1046522
UoQqjodeG20.jpg (31Кб, 604x604)
>>1046467
Выглядит лучше меня, хотя я моюсь каждый день и пишу на популярном языке.
Аноним 18/08/17 Птн 23:30:01  1046558
>>1046506
Хули пиздишь, чорт, там всё то же самое.
То что там какой-то опущенец прокукарекал возле параши "Hask - это не настоящая категория куд-кудах!", ничего не меняет.
Аноним 19/08/17 Суб 00:11:26  1046581
Ебучий ghc-mod не работает.
https://commercialhaskell.github.io/intero/
Аноним 20/08/17 Вск 21:57:38  1047662
Насколько популярен Haskell в сфере геологии/геодезии/геоинформатики?
Аноним 21/08/17 Пнд 16:48:20  1047953
Так, котаны. Объясните мне, как отлаживать хачекод?
Ведь просто так воткнуть print-statement не получится.
Аноним 21/08/17 Пнд 20:31:39  1048105
>>1047953
https://hackage.haskell.org/package/base-4.10.0.0/docs/Debug-Trace.html
Все просто, Няша
:3
Аноним 21/08/17 Пнд 21:15:37  1048144
мне как новичку посоветовали учить хаскел или жс. Что лучше и через сколько на хаскеле можно начать взламывать акки вк? и как его учить я по английски не понимаю есть на русском??!
Аноним 21/08/17 Пнд 22:01:06  1048181
>>1048105
Cпасибо, котик!
Аноним 21/08/17 Пнд 22:01:24  1048182
>>1048144
В твоем случае надо учить английский.
Аноним 25/08/17 Птн 07:58:31  1050603
Ну и кто тут хаскеллом больше дня кодит?
Давайте, объясните, всемогущие пидоры, какого хера у вас досих пор ничего удобнее npm нет? Там всё просто - локальные и глобальные области, очевидные ключи и установка.
И только у вас СУЧАРРРРР какая-то хуйня из кабала и стака, которые одновременно юзать надо ПИДОРРРЫ
Хули ничего удобюного нет??? А
Аноним 25/08/17 Птн 10:16:55  1050628
>>1050603
жиес дебиленок порвался? много вас таких после реакта оттаяло
Аноним 25/08/17 Птн 10:49:44  1050638
>>1050628
Справедливости ради, отмечу что поехавший отчасти прав. Кабал кривое говно, нихуя не собирается. Стек вообще какая-то странная ебала. Поставить можно, удалить нельзя.
Аноним 25/08/17 Птн 15:32:41  1050778
>>1050603
А что если основная сложность хаскеля в его установке?
Аноним 26/08/17 Суб 15:32:15  1051283
Хасканы, объясните мне. Вот чистый функции, ко-ко-ко. Но ведь как только нужно сделать что-то реальное, сразу всплывают Reader+Writer+State+runExcept. Спрашивается, нахуя так выебываться и выпиливать мутабельность, если один хуй мы получаем мутабельность, но хитровыебанную, которую неудобно писать?
Аноним 26/08/17 Суб 17:28:15  1051327
>>1051283
Ты ломишься в открытые двери.
Аноним 26/08/17 Суб 17:30:56  1051331
>>1051327
Че сказать-то хотел?
Аноним 26/08/17 Суб 17:31:47  1051333
>>1051331
Что сказал, то и хотел.
Аноним 26/08/17 Суб 17:33:27  1051334
>>1051333
Высокомерный мудак дохуя?
Аноним 26/08/17 Суб 17:37:16  1051337
>>1051334
Ну, вот, и пообщались.
Аноним 27/08/17 Вск 02:50:26  1051705
Парни, кодю на жаваскрипт,
как отношение ? что скажете как вообще ?
Аноним 27/08/17 Вск 02:52:02  1051706
ЖС же младший брат Хаскеля ?
Аноним 27/08/17 Вск 05:28:29  1051757
>>1051706
Где пруфы?
Аноним 27/08/17 Вск 10:16:23  1051813
>>1051757
Посмотри на сраный редакс.
Аноним 27/08/17 Вск 11:55:29  1051865
>>1051813
Что же именно там нужно увидеть?
Аноним 27/08/17 Вск 12:00:10  1051869
>>1051865
Дезигн спизженный с элма, который довольно сильно похож на хацкель.
Аноним 27/08/17 Вск 12:26:28  1051891
>>1051869
Даже если это так, разве это доказывает что
>ЖС же младший брат Хаскеля ?
Аноним 27/08/17 Вск 13:12:14  1051920
>>1051891
Маленький и тупой. Не как Тирион.
Аноним 27/08/17 Вск 13:18:01  1051921
pic1358332648.jpg (55Кб, 420x280)
>>1051920
Аноним 29/08/17 Втр 14:56:00  1053298
Блядский случай. Почему я должен вообще думать в 2017 году про юникод?
Аноним 29/08/17 Втр 14:59:47  1053300
>>1053298
http://lpaste.net/358054
show выдает хуйню вместо текста. Как с этим говно бороться?
Аноним 29/08/17 Втр 22:46:47  1053648
15009158489411.jpg (38Кб, 479x395)
У меня есть функция
> вжух :: Команда -> Состояние -> Either Пиздец Состояние
Теперь я хочу протестить цепочку этих изменений.
> main :: IO ()
> main = putStrLn $ either id show $ вжух Ебанись начальноеСостояние
Как мне сделать цепочку изменений, Either в IO впихнуть или шо?
Аноним 29/08/17 Втр 23:02:12  1053661
>>1053648
>Either в IO впихнуть или шо?
Да. Лифтишь в монаду. Задачка вообще на 5 минут.
Аноним 29/08/17 Втр 23:05:49  1053664
>>1053661
Нихуя не понимаю как. Надо что-то вроде
> вжух Ебанись >>= вжух Обосрись
чтобы стейт передавался дальше и логи писались
Аноним 30/08/17 Срд 00:23:04  1053728
>>1053664
Если тебе надо просто внутри одной манады пустить вычисления в другой манаде, то, думаю, можно их просто в do-блок завернуть.
Аноним 30/08/17 Срд 00:44:22  1053744
Почему этот тред такой активный? Неужели есть работа на Хаскелле? Или наоборот все отбросы, непринятые рыночком, собрались в этом треде? В противовес ML-тред заглох, т.к. все перекатились в слак. А сюда постят и постят.
тред не читал
Аноним 30/08/17 Срд 11:01:20  1053929
>>1053744
Kakoe otnoshenie nalichie raboti imeet k poplulyarnosti treda?
Аноним 30/08/17 Срд 12:29:46  1053945
>>1053744
За ФП будущее. Скоро С++ байтоебы нужны будут только для поддержки легаси говна. А все новые проекты будут пилиться на Хаскеле и Идрисе.
Аноним 30/08/17 Срд 13:06:30  1053957
>>1053744
Ну смотри, люди растут, а значит со времен есть ненулевой шанс, что кто-то решит сделать проект в прод на функциональщине. Например я думаю над тем, чтобы новый проект (по работе) делать на purescript.
Аноним 30/08/17 Срд 14:23:32  1053996
>>1036970
Бамп вопросу. ФП-шники, ну расскажите как вы программируете с замыканиями на хаскеле, кто в теме.
В упор не понимаю, откуда это пошло, что, мол, замыкания - это из ФП?
Аноним 30/08/17 Срд 14:38:51  1054009
>>1053996
фп связано с замыканиями потому что в сишке и паскале нельзя создавать вложенный функции, а поэтому нечему "замыкаться".
Аноним 30/08/17 Срд 14:41:07  1054012
>>1054009
Я не понял. Расшифруй.
Аноним 30/08/17 Срд 14:41:44  1054013
>>1054009
А в php 3 можно создавать. php 3 - функциональный язык?
Аноним 30/08/17 Срд 14:42:21  1054014
>>1054013
Я не говорил что это достаточный признак.
Аноним 30/08/17 Срд 14:44:15  1054016
>>1053996
Анонiмус, прими таблетки и вернись на ЛОР.
Аноним 30/08/17 Срд 14:49:45  1054020
>>1054016
Нет, пусть тут сидит. там его опять забанят. А здесь каждый нищий духом пригодится.
Аноним 30/08/17 Срд 14:56:14  1054026
>>1053996
>замыкания - это из ФП
Замыкания пришли из ЛИСПа, а он хоть и не чистый, но местами ФП.

На Хачкеле может быть записано как-то так:
f x = \y -> x y
Аноним 30/08/17 Срд 14:56:54  1054028
>>1054016
Я вас не понял. Что есть ЛОР?
Здесь, есть вменяемые люди, которые могут по-нормальному ответить на мой вопрос, в конце концов?
Аноним 30/08/17 Срд 14:58:44  1054030
>>1054026
>f x = \y -> x y
Нормальная такая абстракция. А замыкания то здесь где?
Аноним 30/08/17 Срд 15:01:14  1054032
>>1054028
Ты тупой, поэтому не можешь понять ответа.
>>1054030
Для тупых вариант на жс:
> const f = x => y => x(y)
Как видишь функция, которая возвращается из f(x) замкнута на x.
Аноним 30/08/17 Срд 15:01:59  1054033
>>1054030
Замыкание - это лямбда с некоторым лексическим окружением. x находится в лексическом окружении лямбды.
Аноним 30/08/17 Срд 15:05:18  1054038
>>1054032
Я не знаю JavaScript. Из ФП знаю только хаскель.
>замкнута
Что ты под этим понимаешь? Параметризацию терма свободной переменной (т.е. абстракцию)?
Ну а замыкания то здесь причём?
Аноним 30/08/17 Срд 15:07:04  1054040
>>1054033
У тебя какое-то превратное представление о замыканиях.
Аноним 30/08/17 Срд 15:10:51  1054044
>>1054040
Давай своё определение замыкания тогда.
Аноним 30/08/17 Срд 15:12:25  1054045
>>1054044
Мудила, открой уже википедию сраную
> Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своём контексте.
Аноним 30/08/17 Срд 15:14:09  1054048
>>1054045
Дебил, в чем мое определение противоречит википидорному?
Аноним 30/08/17 Срд 15:14:11  1054050
>>1054044
Ну я же уже писал вот здесь >>1036970
Я видел как это бывает, и сам так программировал с замыканиями на C# и C++. Но как это должно работать в ФП не понимаю.
Аноним 30/08/17 Срд 15:17:00  1054053
>>1054038
Мы тебе тут Рейнольдса должны пересказывать?
Аноним 30/08/17 Срд 15:19:33  1054058
>>1054053
Кто такой Рейнольдс?
Я просил показать, как использовать замыкания в ФП.
Аноним 30/08/17 Срд 15:21:04  1054061
>>1054058
>Кто такой Рейнольдс?
John C. Reynolds
Аноним 30/08/17 Срд 15:23:48  1054066
>>1054050
Смотри определение здесь >>1054026
>f x = \y -> x y

Теперь хуяк:

d = f const
e = f id

и родились две новые функци. Так и работает.
Аноним 30/08/17 Срд 15:24:06  1054067
>>1054061
Ну и что там у Рейнольдса то?
Аноним 30/08/17 Срд 15:25:00  1054069
>>1054067
Почитай.
Аноним 30/08/17 Срд 15:26:19  1054070
>>1054069
Что?
Аноним 30/08/17 Срд 15:27:14  1054071
>>1054070
Рейнольдса
Аноним 30/08/17 Срд 15:27:24  1054072
>>1054066
>Так и работает.
Что работает?
Аноним 30/08/17 Срд 15:28:11  1054073
>>1054072
Замыкание.
Аноним 30/08/17 Срд 15:28:23  1054074
>>1054071
Ты издеваешься?
Аноним 30/08/17 Срд 15:30:54  1054075
123.png (25Кб, 435x104)
>>1054074
>Ты издеваешься?
Нет.
Аноним 30/08/17 Срд 15:31:05  1054077
>>1054073
Сначала определили абстракцию f x = \y -> x y
Потом две апликации
d = f const
e = f id
А где там замыкание то?
Аноним 30/08/17 Срд 15:32:23  1054078
>>1054075
Так а что это за текст? Напиши хоть название.
Аноним 30/08/17 Срд 15:33:04  1054079
>>1054078
О госпаде. Мог бы в википедии уже посмотреть.
Theories of programming languages.
Аноним 30/08/17 Срд 15:40:03  1054086
>>1054077
d и e. Два экземпляра одной и той же лямбды в разных контекстах.
Аноним 30/08/17 Срд 15:43:03  1054090
>>1054079
Что-то у меня ничего путного не гуглится. Можешь в двух словах сказать, в чём там суть, ну или хотя бы ссылкой поделиться, если есть?
Аноним 30/08/17 Срд 15:44:02  1054092
>>1054090
https://www.amazon.com/Theories-Programming-Languages-John-Reynolds/dp/0521106974
Аноним 30/08/17 Срд 15:44:46  1054094
>>1054086
Что такое "экземпляры лямбды" и что есть их контекст? И где здесь замыкание?
Аноним 30/08/17 Срд 15:45:25  1054095
>>1054094
Съеби уже в пхп тред. Ты тупой и тебе тут не место.
Аноним 30/08/17 Срд 15:46:20  1054097
>>1054092
Видимо, ты всё-таки издеваешься.
Аноним 30/08/17 Срд 15:46:49  1054098
>>1054097
Ссылок на перацкие копии не даю, сорь.
Аноним 30/08/17 Срд 15:48:29  1054100
image.png (21Кб, 825x124)
>>1054092
Найс PHP-макаку разорвало.
Аноним 30/08/17 Срд 15:56:53  1054107
>>1054033
Это определение (в сущности, тоже самое, что и это >>1054045) годятся в процедурном программировании, но какой смысл всё это может иметь в ФП? в который раз повторяю свой вопрос
Аноним 30/08/17 Срд 15:57:07  1054108
>>1054094
f возвращает лямбду (в определении которой есть свободная переменная x) в контексте (лексическом окружении), в котором x связана с конкретным значением.

Два раза вычислив f (в определениях d и e), создались две одинаковые лямбды но с разными контекстами.
Аноним 30/08/17 Срд 16:00:31  1054109
>>1054107
А тебе именно не понятно по отношению к ФП? Все тоже самое: ФВП, различные контексты в разных частях программы.
Аноним 30/08/17 Срд 16:03:35  1054113
>>1054107
>Это определение (в сущности, тоже самое, что и это >>1054045) годятся в процедурном программировании
И не только.

> но какой смысл всё это может иметь в ФП
Определи "ФП".
Аноним 30/08/17 Срд 16:05:45  1054116
>>1054113
Фалоклитороммитатор Педерастичный.
Аноним 30/08/17 Срд 16:09:54  1054120
>>1054113
>Определи "ФП".
Зачем заново определять ФП? Возьмём обыкновенное определение, как аппликативную модель вычислений, данную в виде λ-исчисления или комбинаторной логики.
Аноним 30/08/17 Срд 16:13:19  1054125
>>1054120
жс дристня подпадает под это определение?
Аноним 30/08/17 Срд 16:14:37  1054127
>>1054125
Да не знаю я ЖС, писал ведь уже.
Аноним 30/08/17 Срд 16:16:27  1054130
>>1054127
А че знаешь?
Аноним 30/08/17 Срд 16:17:44  1054131
>>1054130
Я не знаю JavaScript. Из ФП знаю только хаскель.
Аноним 30/08/17 Срд 16:18:44  1054135
>>1054130
По-моему ты невнимательно читаешь тред.
Аноним 30/08/17 Срд 16:25:36  1054145
>>1054120
В терминах \-исчисления замыкание возникает где-то между аппликацией и непосредственным проведением бета-редукции:
app (\x . \y -> x y) id
closure (\y -> x y) [x := id]
beta (\y -> id y)
Аноним 30/08/17 Срд 16:29:47  1054152
>>1054108
Как это свободная переменная связана с определённым значением? Так она свободная или нет?
>Два раза вычислив f (в определениях d и e), создались две одинаковые лямбды но с разными контекстами.
Да ничего там не вычисляется, мы на основе одной абстракции (λ x y. xy) определили две (λ y. const y) и (λ y. id y), у каждой из которых имеется по одной свободной переменной.
Замыкание здесь где? Где здесь преодоление захвата переменной (т.е фунарг)?
Аноним 30/08/17 Срд 16:33:55  1054158
Нахуй ваши замыкания. Лучше объясните монад трансформеры на примере.
Аноним 30/08/17 Срд 16:49:18  1054164
>>1054152
Свободная она в чистом лямбда выражении (\y-> x y), абстракция f x создает некоторый контекст в котором x свяжется после аппликации.

>Да ничего там не вычисляется,
e = f id - аппликация, и в результате не создается абстракция, а либо бета-редуцируется до терма (\y -> id y), либо остается closure (\y -> x y) [x := id]. Можно рассматривать и так, и эдак и все будет правдой. Что там реально создается - зависит от конкретного вычислителя.

>Где здесь преодоление захвата переменной (т.е фунарг)?
В абстрагировании (\y-> x y) в функции f x.
Аноним 30/08/17 Срд 16:55:34  1054167
>>1054145
Что значит "между"? Аппликация - это не этап вычислений, это любой терм вида (T₁ T₂) где T₁, T₂ ∈ Λ. β-редукция - примерно то что у тебя обозначено как closure, а то, что ты называешь beta - аппликация (тоже терм).
Аноним 30/08/17 Срд 16:57:49  1054170
>>1054167
>beta - аппликация (тоже терм).
Тьфу, то есть абстракция
Аноним 30/08/17 Срд 17:01:03  1054172
Забавно что хаскелепидоры готовы до посинения обсуждать теоркат, но когда надо реально что-то сделать, они съебывают в туман. Моё недавнее приключение в стране xmonad доказывает это чуть более чем полностью. Окружению уже 10 лет, а оно до сих пор кривое, глючное и с десткими болезнями.
Аноним 30/08/17 Срд 17:03:42  1054176
>>1054152
>по одной свободной переменной
Вернее по одной связанной переменной
только сейчас заметил, что не то написал,
что имел в виду
Аноним 30/08/17 Срд 17:08:01  1054178
>>1054167
beta-редукция примерно так записывается, когда выражение записано в общем виде (T [x : = something]). У меня чуть другой смысл - у лямбда выражения есть контекст, в котором определены некоторые переменные. Т.е. грубо говоря, абстракция создает контекст с не связанным x. После аппликации, в самом начале бета-редукции мы в этом контексте связали x со значением. Вот в этот момент вся эта конструкция и называется замыканием. А дальше мы можем сразу провести редукцию если переменная иммутабельна, или таскать эту конструкцию по остальной части программы в любом случае.
Аноним 30/08/17 Срд 17:11:19  1054180
>>1054172
В xmonad у меня все нормально работает.
Аноним 30/08/17 Срд 17:21:06  1054184
>>1054164
Что такое "чистое лямбда выражение"?
>Свободная она в чистом лямбда выражении (\y-> x y), абстракция f x создает некоторый контекст в котором x свяжется после аппликации.
В хаскеле все термы замкнуты (т.к. нет множества свободных переменных, как это полагается в λ-исчислении).
>не создается абстракция, а либо бета-редуцируется до терма (\y -> id y)...
Так терм (λ y. id y) и есть абстракция.
>остается closure (\y -> x y) [x := id]
Это я не понял. Что это значит в λ-исчислении?
Аноним 30/08/17 Срд 17:30:56  1054185
>>1054178
>у лямбда выражения есть контекст
Какой такой контекст?
>определены некоторые переменные
Но в хаскеле переменные не определяются. Определяются только (замкнутые) термы.
>если переменная иммутабельна
Как это "иммутабельна"? Переменная она переменная и есть (параметризует терм-абстракцию и всё).
Для начала бы понять, возможен ли в ФП захват переменной, если переменная - это не ячейка памяти, ничего не хранит, на неё ничто не может ссылаться, и у неё не времени существования (как в процедурных языках).
Аноним 30/08/17 Срд 17:56:57  1054202
>>1054185
>Но в хаскеле переменные не определяются.
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-240003.2
Аноним 30/08/17 Срд 18:14:10  1054220
>>1054202
Ну при чём здесь это? Спецификация устанавливает конкретный синтаксис языка. Переменные в синтаксисе хаскеля, конечно, имеются, именно для того, чтобы определять абстракции (т.е. они связанные). Но в программе самостоятельную переменную объявить нельзя (да это и не имеет смысла).
Аноним 30/08/17 Срд 18:49:41  1054248
>>1054184
>Что такое "чистое лямбда выражение"?
"Очищенное" от обстракции f x

>Так терм (λ y. id y) и есть абстракция.
Да, я имел ввиду, что это не программист абстрагировал, а вычислил компилятор, или рантайм.

>Это я не понял. Что это значит в λ-исчислении?
Я так обозначил контекст для лямбды.

>>1054185
>Какой такой контекст?
В котором есть (или будет в момент вычисления этого выражения) определение x.

>Но в хаскеле переменные не определяются. Определяются только (замкнутые) термы.
f x = \y -> x y
Но ведь тут x не определен. Он становится определен только после вызова f something

>Как это "иммутабельна"? Переменная она переменная и есть (параметризует терм-абстракцию и всё).
Это означает, что ее только один раз в конкретном контексте можно связать со значением.
Аноним 30/08/17 Срд 19:29:35  1054283
>>1054248
>"Очищенное" от обстракции f x
Как это "Очищенное"?
>В котором есть (или будет в момент вычисления этого выражения) определение x.
Не понимаю. Приведи пример такого контекста. Как это x может быть "определён"?
>f x = \y -> x y
>Но ведь тут x не определен. Он становится определен только после вызова f something
Что значит не определён?
f x = \y -> x y эквивалентно f = λ x y. xy
Просто взяли и определили (написали) такую абстракцию. А потом взяли и определили аппликацию: d = f const , которая равна (β-редуцируема) абстракции: d ⇌ λ y. const y
>Это означает, что ее только один раз в конкретном контексте можно связать со значением.
Что значит "связать со значением"? Подстановка терма вместо связанной переменной происходит по правилу сокращения редекса (λ x. A)B → A[x := B].
Почему один раз?
Аноним 30/08/17 Срд 21:06:11  1054368
>>1054283
>Как это "Очищенное"?
Взял терм f x = \y -> x y , ластиком стер f x = и получил \y -> x y

>Не понимаю. Приведи пример такого контекста. Как это x может быть "определён"?

g = let x = id in \y -> x y

>f x = \y -> x y эквивалентно f = λ x y. xy
Эквивалентно \x . \y . x y
Здесь абстракция \x - это лексическое окружение для \y . x y, т.к. x во второй лямбде свободная (до тех пор, пока не абстрагировали, конечно же)

>Что значит "связать со значением"? Подстановка терма
Я уже говорил, что промежуток между аппликацией и бета-редукцией можно рассматривать как связывание переменной x в контексте \x со значением, после чего выполняется подстановка и редукция.
Аноним 31/08/17 Чтв 02:50:02  1054567
>>1054368
>Взял терм f x = \y -> x y , ластиком стер f x = и получил \y -> x y
Это не терм, а равенство, определяющее f. Зачем стирать "f x ="? И что же мы хотим получить? Абстракцию, которая теперь не связана с f, содержащую свободную переменную (которых нет в хаскеле)? Зачем?
>g = let x = id in \y -> x y
Здесь x не является переменной (ни свободной, ни связанной). Это именованный терм в ограниченной области видимости.
>Эквивалентно \x . \y . x y
Ну да. Так обозначается (λ x y. xy) ≡ (λ x. (λ y. xy)).
>Здесь абстракция \x - это лексическое окружение для \y . x y, т.к. x во второй лямбде свободная (до тех пор, пока не абстрагировали, конечно же)
Так и есть в λ-исчислении, но в хаскеле все термы замкнуты. Значит терм (λ y. xy) определить нельзя.
>промежуток между аппликацией и бета-редукцией
Какой промежуток? Аппликация - это терм, β-редукция - шаг вычисления. Это разнородные понятия. Какой между ними может быть промежуток?
>связывание переменной x
Что такое связывание переменной в ФП?
Аноним 31/08/17 Чтв 02:58:07  1054570
>>1054567
> Это именованный терм в ограниченной области видимости.
Что такое "область видимости"? Что такое "именованный терм"?
Аноним 31/08/17 Чтв 03:05:01  1054572
>>1054570
>Что такое "именованный терм"?
Обычный именованный терм, как f = (λ x y. xy).
>Что такое "область видимости"?
Область видимости терма x в
>g = let x = id in \y -> x y
ограничена определением терма g, т.е. "x = id" только слева от "g =".
Аноним 31/08/17 Чтв 03:06:13  1054574
>>1054572
>слева
Вернее справа.
Аноним 31/08/17 Чтв 10:30:48  1054639
>>1054567
Спасибо, анон, за беседу, почерпнул много интересного. Но заебался я уже спорить, тем более, что:
https://wiki.haskell.org/Closure
Аноним 31/08/17 Чтв 11:23:32  1054652
>>1054639
Можно было бы принять такое определение замыканий в ФП, но тут я вижу два препятствия:
1. В хаскеле нет свободных переменных (которые там упоминаются).
2. Такое определение по смыслу не связано с замыканиями в процедурно-императивном программировании (т.к. в ФП переменные не могут захватываться).
Аноним 31/08/17 Чтв 12:46:20  1054674
>>1054572
>Обычный именованный терм
Ну тогда замыкание это обычное замыкание. Будем считать, что ты получил определение, которого ты заслуживаешь.
Аноним 31/08/17 Чтв 12:47:16  1054676
>>1054652
>В хаскеле нет свободных переменных
https://wiki.haskell.org/Free_variable
Аноним 31/08/17 Чтв 12:47:33  1054677
>>1054674
>замыкание это обычное замыкание
Чего?
Аноним 31/08/17 Чтв 12:48:58  1054679
>>1054677
Сначала формализуй мне "область видимости".
Аноним 31/08/17 Чтв 12:49:25  1054680
>>1054676
Это касается λ-исчисления. В хаскеле нельзя определить терм вида (\x -> x y)
Аноним 31/08/17 Чтв 12:51:04  1054682
>>1054680
>Это касается λ-исчисления.
Нет, это касается Хаскеля. (\x -> x y) — это хаскелевский синтаксис.
Аноним 31/08/17 Чтв 12:51:17  1054683
>>1054679
https://ru.wikipedia.org/wiki/Область_видимости
С поправкой на ФП.
Аноним 31/08/17 Чтв 12:52:03  1054684
>>1054683
Эт чё, формализация?
Аноним 31/08/17 Чтв 12:54:16  1054686
>>1054682
Кроме синтаксиса в языке есть семантика вычислений. Ещё раз, в хаскеле нельзя определить терм вида (\x -> x y). Такой терм не может быть редуцирован к типизируемому (в хаскеле) значению.
Аноним 31/08/17 Чтв 12:56:26  1054688
>>1054684
Нет, но ведь отсюда ясно, что это такое, и можно в соответствии с этим и формализовать.
Аноним 31/08/17 Чтв 13:02:21  1054692
>>1054652
1. Свободная переменная - это та, которая встречается в теле функции, но не является её параметром. В выражении (f x =\y -> x y): x свободная, т.к. в функции \y -> x y не является параметром.
2. Семантика языка другая, но вся разница сводится к мутабельности лексического окружения замыкания.
Аноним 31/08/17 Чтв 13:03:40  1054694
>>1054686
>Кроме синтаксиса в языке есть семантика вычислений.
Ну вот и формализуй мне семантику именованного терма и области видимости.

> Ещё раз, в хаскеле нельзя определить терм вида (\x -> x y).
Внутри области видимости, где определён y, можно.
При этом в подвыражении (\x -> x y), y считается свободной переменной.

>>1054688
>Нет, но ведь отсюда ясно, что это такое, и можно в соответствии с этим и формализовать.
Ну раз тебе ясно — вперёд, формализуй.
Аноним 31/08/17 Чтв 13:08:59  1054696
>>1054692
Что ж такое-то, по второму кругу чтоли?
Определение (f x =\y -> x y) эквивалентно абстракции (f = λ x y. xy), в которой обе переменные связанные (знаком λ).
>мутабельности лексического окружения замыкания
Вот это я не понял. Поясни.
Аноним 31/08/17 Чтв 13:11:20  1054697
>>1054696
>обе переменные связанные (знаком λ)
В лямбде бывает только одна связання знаком λ переменная.
Аноним 31/08/17 Чтв 13:13:47  1054698
>>1054694
>При этом в подвыражении (\x -> x y), y считается свободной переменной.
Верно.
>формализуй
Не стану я этим сейчас заниматься. Спрашивай, что конкретно непонятно.
Аноним 31/08/17 Чтв 13:14:38  1054699
>>1054697
Уже писал, ведь (λ x y. xy) ≡ (λ x. (λ y. xy)).
Аноним 31/08/17 Чтв 13:15:30  1054700
>>1054699
Ну и что, в (λ y. xy), x это не свободная переменная?
Аноним 31/08/17 Чтв 13:15:58  1054701
>>1054698
>Не стану я этим сейчас заниматься.
Почему?
Аноним 31/08/17 Чтв 13:17:06  1054702
>>1054701
Потому, что мне это и так достаточно ясно.
Аноним 31/08/17 Чтв 13:17:59  1054703
>>1054702
Тебе кажется.
Аноним 31/08/17 Чтв 13:18:12  1054704
>>1054700
Свободная. Ну и что же?
Аноним 31/08/17 Чтв 13:18:34  1054705
>>1054703
А что не так?
Аноним 31/08/17 Чтв 13:20:04  1054706
>>1054704
Что ты хочешь услышать?

>>1054705
Что тебе кажется.
Аноним 31/08/17 Чтв 13:24:14  1054708
>>1054706
>Что ты хочешь услышать?
Что следует из того, что эта переменная свободная? Как это поможет понять замыкания в ФП?
>Что тебе кажется.
Почему, мне кажется? Разве понятие области видимости чем-то плохо?
Аноним 31/08/17 Чтв 13:26:56  1054710
>>1054708
>Как это поможет понять замыкания в ФП?
Прямо.

>>1054708
>Разве понятие области видимости чем-то плохо?
Нет, оно не плохо. Но что это такое — ты так и не сказал.
Аноним 31/08/17 Чтв 13:31:45  1054715
>>1054710
>Прямо
Ну так объясните плз., если не трудно. Это и спрашиваю.
Аноним 31/08/17 Чтв 13:36:14  1054717
>>1054715
Всем достаточно ясно, что это.
Аноним 31/08/17 Чтв 13:37:56  1054719
>>1054694
>При этом в подвыражении (\x -> x y), y считается свободной переменной.
Да подтермы в хаскеле могут быть незамкнуты, но когда я говорю, что в хаскеле нет свободных переменных, я имею в виду, что все именованные термы замкнуты (т.е. все переменные в их определениях связанные), и редуцироваться они будут только к замкнутым термам или атомам (вроде конструкторов данных).
Аноним 31/08/17 Чтв 13:39:21  1054720
>>1054717
Ну вот мне не ясно. Объясните, плз.
Аноним 31/08/17 Чтв 13:54:33  1054731
>>1054694
Если угодно, можно незамкнутые подтермы называть замыканиями, но зачем, зачем на них обращать особое внимание, и как это связано с проблемой фунарга (есть ли она в ФП)?
Аноним 31/08/17 Чтв 13:55:32  1054732
>>1054696
>Вот это я не понял. Поясни.
Что конкретно не понятно?
Аноним 31/08/17 Чтв 13:58:18  1054733
>>1054732
Непонятно, что такое "мутабельность лексического окружения замыкания". Что есть лексическое окружения замыкания? В каком смысле оно мутабельно? Почему?
Аноним 31/08/17 Чтв 13:58:52  1054734
>>1054731
>незамкнутые подтермы называть замыканиями
А что, в каком-то языке в функциях (которые входят в замыкание, конечно же) нет свободных переменных?
Аноним 31/08/17 Чтв 14:01:38  1054736
>>1054734
Что-то я не смог это расшифровать.
Аноним 31/08/17 Чтв 14:07:12  1054742
>>1054733
А что есть много смыслов у слова мутабельность в программировании?
Аноним 31/08/17 Чтв 14:09:16  1054744
>>1054736
Я спрашиваю в каких это таких языках тебе знакомых свободные переменные нельзя использовать в определениях функций.
Аноним 31/08/17 Чтв 14:09:18  1054745
>>1054742
Не понятно, как мутабельным может быть лексическое окружение замыкания (что это?).
Аноним 31/08/17 Чтв 14:10:35  1054747
>>1054745
Но понятно как оно может быть иммутабельным?
Аноним 31/08/17 Чтв 14:14:31  1054751
>>1054744
Из ФП знаю только хаскель. В императивнах языках, которые я знаю (C#, C++, assebler), понятие "переменная" имеет другой смысл, и такие характеристики как "свободная" и "связанная" к ним не применимы.
Аноним 31/08/17 Чтв 14:15:05  1054752
>>1054747
Это тоже не понятно.
Аноним 31/08/17 Чтв 14:16:49  1054754
>>1054751
>и такие характеристики как "свободная"

int hui() {
return x;
}

Здесь x - свободная переменная в функции hui.
Аноним 31/08/17 Чтв 14:22:41  1054759
>>1054752
А словосочетание "лексическое окружение" тебе понятно?
Аноним 31/08/17 Чтв 14:33:06  1054763
>>1054759
В основном да, это зависит от предмета обсуждения.
Аноним 31/08/17 Чтв 14:41:24  1054770
>>1054754
Нет с чего бы это.
Переменная может быть свободной или связанной в конкретном λ-терме. Здесь переменные параметризуют терм, указывая места подстановок термов (при β-редукциях).
В императивных языках переменные - ячейки памяти, на которые можно ссылаться (в т.ч. из сторонних процедур), у которых есть времена существования, возможно типизированные, и т.д.
Аноним 31/08/17 Чтв 14:47:47  1054773
>>1054770
Где это в сисярпе ты видел ячейки памяти? Семантически там переменные никакого отношения к памяти не имеют (Если не трогать unsafe, а если трогать, то заодно потрогай unsafe в Haskell)
Аноним 31/08/17 Чтв 14:50:06  1054775
>>1054773
>Семантически там переменные никакого отношения к памяти не имеют
Как это? А что же делает операция присваивания?
Аноним 31/08/17 Чтв 14:50:55  1054777
>>1054775
Присваивает значение переменной, очевидно. Как это технически реализуется - всем похуй.
Аноним 31/08/17 Чтв 14:54:10  1054781
>>1054777
Значение присваивается и хранится в ячейке памяти. Имя переменной ссылается на ячейку. Такова семантика C#.
Аноним 31/08/17 Чтв 14:59:57  1054787
>>1054781
Это аналогия для С++ байтоёбов, у которых прямая работа с памятью впиталась с молоком Кернигана и Ричи. В семантике сисярпа нет прямой работы с памятью, только с переменными, кроме unsafe.

Для них же есть и в хаскеле аналогия - f - это ссылка на область памяти, содержащую функцию.
Аноним 31/08/17 Чтв 15:02:07  1054789
>>1054787
Но это именно так как я написал. Не понимаю, почему мы об этом спорим.
Аноним 31/08/17 Чтв 15:09:03  1054795
>>1054789
Потому что семантически в сисярпе - переменные это переменные, а не ячейки памяти. Вот в семантике С++ любая переменная - это ячейка памяти.
Аноним 31/08/17 Чтв 15:14:28  1054804
>>1054795
Так где тогда хранятся значения (если не в ячейках памяти), почему они доступны для изменения? Что это за "переменные" такие, и чем их семантика (именно семантика, а не имплементация) отличается от того, что я пишу?
Да какая разница? Может, уже перейдём к замыканиям в ФП?
Аноним 31/08/17 Чтв 15:15:41  1054805
>>1054804
А какая тебе разница где хранятся, если ты на сисярпе пишешь?
Аноним 31/08/17 Чтв 15:19:30  1054809
>>1054805
Где хранятся - то и память. Программирую то я, имея в виду семантику?
Аноним 31/08/17 Чтв 15:22:51  1054811
>>1054809
>Где хранятся - то и память.
А может таблица?
Аноним 31/08/17 Чтв 15:27:48  1054816
>>1054811
>А может таблица?
Это вопрос имплементации.
>>Где хранятся - то и память.
Можно считать это определением.

Я, всё же хотел бы понять про замыкания.
Аноним 31/08/17 Чтв 15:32:51  1054818
>>1054804
>Что это за "переменные" такие, и чем их семантика (именно семантика, а не имплементация) отличается от того, что я пишу?
Тем, что ты определил переменную как ячейку в памяти. Но в сисярпе семантика такова, что переменная - это объект (не в смысле ООП), с которым можно совершать различные действия, но где он находится (в ОЗУ, ПЗУ, в регистре, на берестяной грамоте) программисту похуй.
Аноним 31/08/17 Чтв 15:35:16  1054820
>>1054816
>Я, всё же хотел бы понять про замыкания.
Нихуя не поймешь, пока не осознаешь, что переменная в общем случае императивных языков это не ячейка памяти.
Аноним 31/08/17 Чтв 15:36:38  1054822
14792919536480.png (94Кб, 378x480)
Пиздец, вас не заебало? Столько времени сраться из-за абсолютно неважной хуйни.
Аноним 31/08/17 Чтв 15:39:31  1054827
>>1054818
>объект
Ну так а семантика этого "объекта" какова? Чем он отличается от именованной ячейки памяти?
Семантика C# - императивная - обобщённая машина Тьюринга с ограниченной лентой памяти.
Аноним 31/08/17 Чтв 15:44:16  1054834
>>1054827
>Ну так а семантика этого "объекта" какова? Чем он отличается от именованной ячейки памяти?
Тем, что это не именованная ячейка памяти, а объект похуй какой природы.

>Семантика C# - императивная - обобщённая машина Тьюринга с ограниченной лентой памяти.
Вот тут вот не пизди. МТ - вычислитель, а не семантика.
Аноним 31/08/17 Чтв 15:45:53  1054836
>>1054822
Да мне несколько поднадоело. Я никогда не испытывал необходимости в замыканиях в хаскеле. Я даже не могу понять какой смысл могут иметь "те самые" замыкания в ФП. Но почему-то часто натыкаюсь на многозначительные замечания, дескать, "замыкания - это из ФП". И всё никак не могу понять, почему. Хоть кто-нибудь в самом деле это понимает? Ну объясните же уже, в конце концов!
Аноним 31/08/17 Чтв 15:47:53  1054837
>>1054836
Это просто удобный термин, означающий тривиальную вещь. Используют для того, чтобы не ебать мозг людям, как это делаешь ты.
Аноним 31/08/17 Чтв 15:49:43  1054840
>>1054836
>"замыкания - это из ФП". И всё никак не могу понять, почему
Ты бы для начала разобрался бы, что такое замыкание.
Аноним 31/08/17 Чтв 15:50:08  1054841
>>1054834
>МТ - вычислитель, а не семантика.
Моделью императивных вычислений служит машина Тьюринга. C# - императивный язык.
Так что за "объект" то?
Аноним 31/08/17 Чтв 15:52:06  1054842
>>1054840
Снова здорова. Теперь ты будешь издеваться? Прочитай тред хоть.
Аноним 31/08/17 Чтв 15:53:37  1054843
>>1054837
Ну вот, может хоть ты знаешь? Объясни плз. Ну хоть намекни.
Аноним 31/08/17 Чтв 15:55:38  1054845
>>1054843
Тебе уже в треде 1000 раз сказали. Если тебе нужно что-то еще сверх этого, то у тебя проблемы с головой.
Аноним 31/08/17 Чтв 15:58:07  1054848
>>1054841
>Моделью
А семантика тут при чем? Неужели ты на сисярпе прямо МТ программируешь?

>Так что за "объект" то?
Некий абстрактный объект, не привязанный к конкретной реализации.

>>1054842
Бесполезно. Судя по тому, что тебе непонятно как в замыкании связано лексическое окружение и анонимная функция, как анонимная функция может менять свое лексическое окружение, ты не понимаешь термина "замыкание" даже на уровне императивщины, всю императивщину скатываешь в байтоеблю, хотя это не так.
Аноним 31/08/17 Чтв 16:07:43  1054855
>>1054848
>А семантика тут при чем?
Так семантика переменной в C# - именованная ячейка памяти, как и в любом императивном языке, моделью которых является МТ (с лентой памяти).
>Некий абстрактный объект, не привязанный к конкретной реализации.
Так а семантика его какова? Как с ним обращаться? Чем это отличается от именованной ячейки памяти?
>ты не понимаешь термина "замыкание"
Ну так укажи на изъян в моём понимании. Я не претендую на окончательную истинность. Я в самом деле хочу понять?
Аноним 31/08/17 Чтв 16:11:36  1054857
>>1054845
Да много раз отвечали. Вот, вроде, сошлись на том, что это незамкнутые подтермы. Дальше у меня были эти вопросы
>>1054731
И на этом всё - неопределённость.
Аноним 31/08/17 Чтв 16:19:25  1054859
>>1054855
>Так семантика переменной в C# - именованная ячейка памяти
>как и в любом императивном языке, моделью которых является МТ (с лентой памяти).
Это не так. Переменная может быть представлена каким угодно объектом. Императивный подход не оговаривает этого. МТ - это конкретный исполнитель. В семантике языка, которым программируют МТ вообще может не быть переменных.

>Так а семантика его какова? Как с ним обращаться? Чем это отличается от именованной ячейки памяти?
Тем, что это некий абстрактный объект, не привязанный к конкретной реализации.

>Ну так укажи на изъян в моём понимании.
На один указал, но ты пока упорствуешь и не хочешь абстрагироваться от ячеек.
Аноним 31/08/17 Чтв 16:28:24  1054867
>>1054859
>Императивный подход не оговаривает этого.
Тогда что такое императивный подход?
>Тем, что это некий абстрактный объект, не привязанный к конкретной реализации.
Так я же про семантику спрашиваю, а не про реализацию. Ещё раз. Семантика его какова? Как с ним обращаться? Чем он отличается от именованной ячейки памяти?
Ты хот покажи, как ты это хочешь привязать к замыканиям.
Аноним 31/08/17 Чтв 16:35:45  1054874
>>1054867
>Тогда что такое императивный подход?
Машина Тьюринга, ты же сам сказал. В кратце: запись программы в виде последовательности действий. И где тут переменные?

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

>Ты хот покажи, как ты это хочешь привязать к замыканиям.
Для начала надо вернуться к определению замыкания. Давай ты его и напишешь и с каждым словом в определении мы разберемся.
Аноним 31/08/17 Чтв 16:58:19  1054899
>>1054859
>>1054874
>В семантике языка, которым программируют МТ вообще может не быть переменных.
Но мы то рассматриваем те, в которых переменные есть, и они являются именованными ячейками памяти. Иначе как возможен фунарг?
>запись программы в виде последовательности действий.
Каких действий? С ячейками памяти (области на ленте МТ). Там ведь больше нет ничего.
>присваивание, копирование, передача в процедуры и функции.
А какова семантика этих действий?
>Для начала надо вернуться к определению замыкания. Давай ты его и напишешь и с каждым словом в определении мы разберемся.
Уже обсуждалось много раз
>>1054107
>>1036970
>>1054050
Аноним 31/08/17 Чтв 17:15:10  1054910
>>1054899
>Но мы то рассматриваем те, в которых переменные есть, и они являются именованными ячейками памяти
Т.е. переменные - это надстройка над МТ? А значит эта надстройка может быть добавлена как угодно, а не только ячейками памяти на ленте.

>Каких действий? С ячейками памяти (области на ленте МТ). Там ведь больше нет ничего.
Раз есть надстройка над МТ в виде переменных, значит может быть что-то еще и нам это не важно, это забота конкретной машины, которая нам предоставила такой удобный инструмент под названием "переменная".

>А какова семантика этих действий?
Точно такая же, как и написано: присваивание, передача итд. Конкретный исполнитель и механизм программисту не важен, он есть, а что там внутри - похуй.

>Уже обсуждалось много раз

>Замыкание - это лямбда с некоторым лексическим окружением.
Это простенькое берем для разбора?
Аноним 31/08/17 Чтв 17:29:11  1054919
>>1054910
>эта надстройка может быть добавлена как угодно
Вот в этом я не уверен. Мы всё же должны придерживаться случая, когда (императивная) переменная - это именованная ячейка памяти.
>Раз есть надстройка над МТ в виде переменных, значит может быть что-то еще и нам это не важно, это забота конкретной машины, которая нам предоставила такой удобный инструмент под названием "переменная".
Да не надо нам рассматривать реализацию.
>механизм программисту не важен
Как же не важен. При программировании нужно ориентироваться на операционную семантику (этих действий) (на реализацию - необязательно), то есть на то, что это даёт на модели (т.е. МТ).
>>Замыкание - это лямбда с некоторым лексическим окружением.
>Это простенькое берем для разбора?
Да. Это определение годится для императивного случая (за исключением того, что вместо лямбды я бы сказал "функция высшего порядка", т.к. лямбда - это всё же лишь греческая буква).
Аноним 31/08/17 Чтв 17:38:34  1054926
>>1054919
>Мы всё же должны придерживаться случая,
А зачем? Мы уже отошли от МТ, предложенной её автором, введя понятие "переменная". Мы можем создавать какие угодно расширения.

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

>Да.
Точно так же оно годится и для ФП. Там тоже есть ФВП и лексические окружения.
Аноним 31/08/17 Чтв 17:45:51  1054934
>>1054926
>А зачем?
Чтобы был возможен захват переменной.
>Точно так же оно годится и для ФП
Так вот это и не понятно. Зачем оно если нет фунарга? Что такое ФВП? Что такое лексическое окружение в ФП? Лексическое окружение чего?
Аноним 31/08/17 Чтв 17:48:49  1054936
>>1054934
>Чтобы был возможен захват переменной.
Что такое захват переменной?

>Зачем оно если нет фунарга?
Фунарг тут не при чем. Прикладного программиста это вообще волновать не должно.

>Что такое ФВП?
функция высшего порядка

>Что такое лексическое окружение в ФП? Лексическое окружение чего?
Лексическое окружение ФВП
Аноним 31/08/17 Чтв 17:57:57  1054941
>>1054936
>Что такое захват переменной?
Ситуация, когда тело процедуры/функции ссылается на внешнюю переменную, которая может не существовать в момент вызова этой процедуры.
>Прикладного программиста это вообще волновать не должно.
Конечно. В ответ на эту проблему авторы имплементации языка предоставляют прикладному программисту возможность использовать замыкания.
>Лексическое окружение ФВП
Так что же это такое?
>>1054926
>Там тоже есть ФВП
Какие там ФВП? Там термы. Именованные термы называют функциями.
Аноним 31/08/17 Чтв 18:09:43  1054948
>>1054941
>ссылается на внешнюю переменную, которая может не существовать в момент вызова этой процедуры.
Как это ее может не существовать? Такая программа не скомпилится в этом случае.

>Конечно. В ответ на эту проблему авторы имплементации языка предоставляют прикладному программисту возможность использовать замыкания.
Одно из возможных решений.

>Так что же это такое?
Набор свободных переменных, например. (f x z -> \y x z y)
Здесь (\y x y) - ФВП, а [x,z] - лексическое окружение.

>Какие там ФВП? Там термы.
Термы в лямбда исчислении, а в ФП ФВП.
Аноним 31/08/17 Чтв 18:11:39  1054949
>>1054948
>(\y x z y)
Аноним 31/08/17 Чтв 18:19:53  1054957
>>1054948
Намудрил с синтаксисом:
>Набор свободных переменных, например. (f x z = \y -> x z y)
>Здесь (\y -> x y) - ФВП, а [x,z] - лексическое окружение.
Аноним 31/08/17 Чтв 18:33:51  1054966
>>1054948
>Как это ее может не существовать?
Например, если вызывающая процедура завершилась раньше, чем вызываемая.
>Такая программа не скомпиллируется в этом случае.
Почему? Компилятор проверяет области видимости а не времена жизни переменных. Время жизни переменной ситуативно и не известно на этапе компилляции.
Так зачем же по-твоему нам вообще нужны замыкания в императивном подходе?
>[x,z] - лексическое окружение.
То есть лексическое окружение - это множество свободных переменных подтерма?
>Термы в лямбда исчислении, а в ФП ФВП.
λ-исчисление - вычислительная модель ФП. В хаскеле мы имеем дело с самыми настоящими термами. Не понимаю, что тут можно называть ФВП? Что ты имеешь в виду, когда говоришь о ФВП в ФП?
Аноним 31/08/17 Чтв 19:39:44  1055003
>>1054966
>Например, если вызывающая процедура завершилась раньше, чем вызываемая.
МТ - модель вычислений в императивщине. Откуда в машине Тьюринга процедуры и переменные? Там только лента, алфавит ну и еще по мелочи. Команды исполняются строго последовательно и такого просто не может быть.

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

>То есть лексическое окружение - это множество свободных переменных подтерма?
Да.

>В хаскеле мы имеем дело
С функциями. Это же функциональный язык.
Аноним 31/08/17 Чтв 20:00:19  1055019
>>1055003
>Откуда в машине Тьюринга процедуры и переменные?
Они там не нужны. Но в конкретном императивном языке они определяются в терминах машины Тьюринга.
>такого просто не может быть.
Чего не может быть? И почему?
>Переменные существуют только на этапе написания высокоуровневых программ
Переменные - понятие внутриязыковое. В рамках операционной семантики языка переменные существуют во время вычисления.
>С функциями. Это же функциональный язык.
Аргумент бьющий наповал. Ещё раз, в ФП (т.е в аппликативной модели) мы имеем дело с термами (иначе это не ФП), именованные термы называют функциями. Зачем тут какое-то лишнее понятие ФВП? Его имеет смысл использовать в императивных языках, где некоторые функции (процедуры) могут быть высшего порядка, а другие - нет.
>Да.
Ну так какая связь (по смыслу) между императивными замыканиями и незамкнутыми подтермами в ФП?
Аноним 31/08/17 Чтв 20:27:55  1055040
>>1055019
>Ещё раз, в ФП (т.е в аппликативной модели) мы имеем дело с термами
С функциями, которые в конкретном функциональном языке определяются в терминах лямбда-исчисления.

>Переменные - понятие внутриязыковое.
Так же как и переменные с функциями в ФП.

>могут быть высшего порядка, а другие - нет
(\x -> x + 1)
(\x -> const x)
Первая не ФВП, вторая ФВП.
Аноним 31/08/17 Чтв 20:34:55  1055047
>>1055019
>Ну так какая связь (по смыслу) между императивными замыканиями и незамкнутыми подтермами в ФП?

Лексическое окружение в ИП = множество ссылок на внешние переменные в анонимной функции
Лексическое окружение в ФП = множество свободных переменных в анонимной функции
+
сама анонимная функция
=
замыкание.
Аноним 31/08/17 Чтв 20:43:46  1055053
>>1055040
>Ну какие там ещё функции, кроме термов. В хаскеле это в точности λ-термы, определение которых оснащено сопоставлением с образцом. Вычисление - это редуцирование термов до нормальной формы или до значений (содержащих атомы). Семантика хаскеля именно такова. Если этой семантики в языке нет, значит это не ФП.
>Так же как и переменные с функциями в ФП.
Ну как так? Переменная - вполне законный λ-терм. В хаскеле имеются переменные, так как они необходимы для определения абстракций.
>(\x -> x + 1)
>(\x -> const x)
>Первая не ФВП, вторая ФВП.
(λ x. ((+) x 1)), (λ x. const x) - оба терма - абстракции.
Мы до замыканий когда-нибудь доберёмся? Изложи уже своё понимание достаточно развёрнуто. Сколько можно вопросами перебрасываться?
Аноним 31/08/17 Чтв 20:51:11  1055057
>>1055047
Эта связь не по смысл, а внешняя (хотя бы потому, что переменные в ИП и ФП имеют фундаментально разную природу). Замыкания в ИП решают проблему захвата переменных (которая немыслима в ФП). Какую проблему решают "такие замыкания" в ФП (т.е. множество свободных переменных незамкнутого подтерма + сам незамкнутый подтерм) и как? Повторю этот вопрос:
>>1054731
Аноним 31/08/17 Чтв 23:05:37  1055180
>>1055053
>оба терма - абстракции
В лямбда-исчислении. В хаскеле это функции.

>Замыкания в ИП решают проблему захвата переменных
Тебе уже писали, что это просто удобная абстракция в Хаскеле, как функторы и прочая поебень.
Повторяюсь, это прикладного программиста не должно волновать, что там где захватывается, это проблема разработчика компилятора, и то, что удобная абстракция используется как костыль в императивном языке, не означает, что она была для этого придумана.
Аноним 01/09/17 Птн 06:42:57  1055282
>>1055180
>В лямбда-исчислении. В хаскеле это функции.
Что ты этим пытаешься сказать? Какие в хаскеле функции, чем они отличаются от термов, как они вычисляются?
>удобная абстракция в Хаскеле
Удобная для чего? Почему абстракция? Что здесь абстрагируется?
Функторы в ФП и замыкания в ИП я (как прикладной программист) использую осмысленно. Скажите, как я осмысленно могу использовать замыкания в ФП, для чего это может пригодиться?
Почему тогда, часто твердят, что замыкания в ИТ пришли из ФП, если в ФП это бесполезная неважная "абстракция" и по своей аппликативной специфике она не применима для решения проблемы захвата переменной в ИП?
Аноним 01/09/17 Птн 07:02:49  1055289
>>1055180
>не означает, что она была для этого придумана.
А для чего она была придумана?
Аноним 01/09/17 Птн 10:28:17  1055380
>>1055282
>как они вычисляются?
А какая разница? Это не имеет отношение к замыканиям.

>Что здесь абстрагируется?
Один код от другого.

>она не применима для решения проблемы захвата переменной в ИП?
Да нет такой проблемы у прикладного программиста.
Аноним 01/09/17 Птн 10:31:37  1055383
>>1055289
>А для чего она была придумана?
В математике много чего придумано хуй знает для чего, но оказалось, что удобно мыслить замыканиями, к тому же нашлось применение для проблемы фунарга. А в некоторых функциональных языках (Лиспы, например), где лексическое окружение мутабельно, применяется для инкапсуляции.
Аноним 01/09/17 Птн 11:18:18  1055406
>>1055380
>Это не имеет отношение к замыканиям.
Я тоже так думаю.
>>Что здесь абстрагируется?
>Один код от другого.
Как так? Абстракция - мысленный прём отвлечения от незначительных деталий в рассмотрении. Абстрагируется рассматривающий. Как может абстрагироваться код?
>Но прикладные программисты используют замыкания в ИТ для этого.
Для чего же могут использовать замыкания прикладные программисты в ФП? В сущности, это есть мой главный вопрос
>В математике много чего придумано
Где в математике встречается понятие замыкания?
>оказалось, что удобно мыслить замыканиями
Удобно для чего?
Аноним 01/09/17 Птн 11:36:47  1055423
>>1055406
>Как так? Абстракция - мысленный прём отвлечения от незначительных деталий в рассмотрении. Абстрагируется рассматривающий. Как может абстрагироваться код?
Поизучай на досуге что такое абстрагированиее в программировании.
>Для чего же могут использовать замыкания прикладные программисты в ФП?
>>1055383

>Где в математике встречается понятие замыкания?
В информатике, которая является разделом математики.

>Удобно для чего?
Для мозга.
Аноним 01/09/17 Птн 11:55:09  1055434
>>1055423
>Поизучай на досуге что такое абстрагированиее в программировании.
Можешь на что-нибудь сослаться? Что почитать то?
>В информатике, которая является разделом математики.
Ну для чего именно? Может тоже посоветуешь что-нибудь читнуть?
>Для мозга.
Что ты ёрничаешь. При чём здесь мозг? Я спрашиваю, в каких ситуациях удобно мыслить замыканиями и как?
Аноним 01/09/17 Птн 12:01:18  1055443
>>1055380
Я несколько промахнулся
>Да нет такой проблемы у прикладного программиста.
Для чего же могут использовать замыкания прикладные программисты в ФП? В сущности, это есть мой главный вопрос
Аноним 01/09/17 Птн 12:07:36  1055447
>>1055434
>Можешь на что-нибудь сослаться? Что почитать то?
SICP

>Я спрашиваю, в каких ситуациях удобно мыслить замыканиями и как?
Смотришь на выражение, видишь что это замыкание и понимаешь, как с этим работать дальше.

>Для чего же могут использовать замыкания прикладные программисты в ФП? В сущности, это есть мой главный вопрос
Сюда смотри >>1055383
Аноним 01/09/17 Птн 12:14:46  1055450
>>1055447
>Смотришь на выражение, видишь что это замыкание и понимаешь, как с этим работать дальше.
Не понятно. Приведи пример какой-нибудь, если не трудно.
>Сюда смотри
Ну так я и спрашиваю, что это за замыкания в математике, и прошу сослаться на что-нибудь.
Аноним 01/09/17 Птн 12:23:38  1055458
>>1055447
Читал я SICP. Там слово абстракция используется в том значении, в котором я написал. Так же абстракцией там называют само такое рассмотрение/построение. Абстракций кода от кода там нет. Как вообще понимать такое словосочетание?
Аноним 01/09/17 Птн 12:38:32  1055463
>>1055447
Так что в итоге то? Нужны замыкания при программировании на хаскеле или нет?
Если, например, я - императивный программист, пишу с замыканиями, решил разобраться поглубже. Везде пишут: "замыкания - в ФП". Я берусь за хаскель, а в хаскеле замыкания не используются. Есть какие-то но не те, не соответствующие по смыслу императивным. Так выходит?
Аноним 01/09/17 Птн 14:31:34  1055511
>>1055458
>Там слово абстракция используется в том значении, в котором я написал
Не до конца понял, значит. Абстрагирование - это сокрытие деталей реализации конкретной функциональности не только от программиста, но и от сторонней функциональности.

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

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

>Везде пишут: "замыкания - в ФП"
Использование замыканий - признак функционального стиля (ведь использование ФВП, это же признак этого стиля) написания программы, или конкретного участка программы и не более того.
Аноним 01/09/17 Птн 15:31:30  1055534
Перекат мне запилил, быстра блять.
Аноним 01/09/17 Птн 15:41:13  1055541
>>1055511
>Абстрагирование - это сокрытие деталей реализации конкретной функциональности не только от программиста, но и от сторонней функциональности.
Спасибо. Никогда не встречал такого употребления. Я полагал, это надо называть модульностью или что-то вроде того.
>Нет, они идентичные по смыслу, если абстрагироваться от деталей реализации функций и переменных.
Как же идентичны по смыслу, если различаются семантически? Реализацию я и не рассматривал.
>ведь использование ФВП, это же признак этого стиля
Почему это? Признак ФП - аппликативная модель вычислений. А ФВП есть во многих императивных языках, и семантика их вычисления вполне императивная.
Аноним 01/09/17 Птн 16:19:12  1055571
>>1055541
>Как же идентичны по смыслу, если различаются семантически? Реализацию я и не рассматривал.
Смысл-то общий один: есть некоторые данные, которые связаны с некоторой функциональностью в единый объект, который для остальной части программы представляется как функция. Семантика отдельных частей этого объекта не важна.

>Признак ФП - аппликативная модель вычислений.
Признак ФП - это использование функций в математическом смысле.
Аноним 01/09/17 Птн 16:21:20  1055577
>>1055541
> Я полагал, это надо называть модульностью или что-то вроде того.
Модульность один из немногих способов абстрагирования.
Аноним 01/09/17 Птн 16:31:29  1055583
>>1055577
А какие ещё?
Аноним 01/09/17 Птн 16:40:13  1055587
>>1055571
>Смысл-то общий один: есть некоторые данные, которые связаны с некоторой функциональностью в единый объект, который для остальной части программы представляется как функция.
Ну да. Это верно для ИП. В ФП нет никаких (хранимых) данных, "которые связаны с некоторой функциональностью в единый объект".
>Семантика отдельных частей этого объекта не важна.
Почему?
>Признак ФП - это использование функций в математическом смысле.
Это что вообще значит?
Вот тут же уже было определение ФП: >>1054120
Математический смысл отдельных частей программы устанавливает аксиоматическая семантика, и это в общем-то не зависит от подхода ИП/ФП.
Аноним 01/09/17 Птн 19:01:24  1055686
>>1055587
>В ФП нет никаких (хранимых) данных
В лямбда исчислении нет, там даже нумералы и те Чёрча. А в функциональных языках есть.

>Почему?
Потому что мы от них абстрагировались.

>Вот тут же уже было определение ФП
Но у ФП другое определение, именно в терминах математических функций

>Это что вообще значит?
Функция задана декларативно, без намека на порядок вычислений.
Аноним 01/09/17 Птн 19:31:00  1055708
>>1055686
>А в функциональных языках есть.
С чего вдруг? Ты имеешь в виду какие-то "императивные IO-переменные"? Это, конечно, расширяет операционную семантику ФП (например хаскеля), но какое отношение это имеет к ФП-замыканиям (множество свободных переменных незамкнутого подтерма + сам незамкнутый подтерм)?
>Потому что мы от них абстрагировались
От каких частей "этого объекта" мы абстрагировалсь? О чём здесь речь вообще?
>Но у ФП другое определение, именно в терминах математических функций
Какое другое? Вот это?
>Признак ФП - это использование функций в математическом смысле.
Так а что это всё значит? Как его понимать, применять?
Я не понял, оно отличается от этого >>1054120 или нет?
>Функция задана декларативно, без намека на порядок вычислений.
Точный порядок вычислений в аппликативной модели может быть задан по-разному.
Аноним 01/09/17 Птн 20:50:15  1055793
Помогите.
https://pastebin.com/8KPFs9BW
Вот этот код должен вычислять числа Фиббоначи за линейное время (считая что арифметические вычисления выполняются за константу). Но он так не делает.
Видимо, дело в том, что у меня три раза вызывается функция от n - 1 и это не оптимизируется. Как сделать, чтобы оптимизировалось? Как-то сделать локальную переменную и сохранить в неё?
Аноним 01/09/17 Птн 20:56:38  1055801
>>1055793
Уже справился. Оказывается, это делается с помощью where.
Аноним 01/09/17 Птн 21:40:33  1055869
Так, а почему в моём хаскелле нельзя обращаться к элементам кортежа как элементам массива через !!
А fst и snd мне недостаточно.
Аноним 01/09/17 Птн 21:48:06  1055880
Пишут про какой-то паттерн-матчинг, при чём он тут вообще.
Аноним 01/09/17 Птн 22:11:31  1055896
>>1055869
http://hackage.haskell.org/package/tuple-0.3.0.2/docs/Data-Tuple-Select.html
Аноним 02/09/17 Суб 10:57:04  1056025
>>1055880
Где пишут?
Аноним 02/09/17 Суб 23:33:56  1056320
>>1055708
>С чего вдруг?
Свободные переменные -- это те самые данные, а терм - функциональность. Ну что тут непонятного?

>От каких частей "этого объекта" мы абстрагировалсь? О чём здесь речь вообще?
Нам не важно что представляют собой данные (императивные переменные в ИП, или свободные переменные в ФП), а что - функциональность (алгоритм в ИП, или абстракции в ФП) . Данные + функциональность + выглядит_как_функция = замыкание.

>Так а что это всё значит? Как его понимать, применять?
Это значит, что писать программу надо как набор математических выражений в синтаксисе конкретного языка программирования. Применять - пишешь в соответствии с этим пониманием программу:
f = 1 + 2 -- это не "чтобы получить f, возьми 1 и прибавь 2", а "f равен сумме 1 и 2". В первом случае описан алгоритм - императивная семантика, во втором констатация факта - декларативная семантика.

>Я не понял, оно отличается от этого >>1054120 или нет?
>Точный порядок вычислений в аппликативной модели может быть задан по-разному.
Программиста на ФЯП (функциональный язык программирования) не волнует ни порядок вычислений, ни то, как он осуществляется: аппликативно, императивно (в случае, если компилятор транслирует код в императивный язык), или еще как. Т.е. аппликативность - не признак ФП. Признак ФП - декларативность.
Аноним 03/09/17 Вск 07:24:25  1056372
>>1056320
>Свободные переменные -- это те самые данные
У терма нет данных. Здесь это слово не применимо. Слово данные имеет два значения: исходные данные задачи (мы здесь не об этом), либо хранимая информация (имеет смысл лишь в ИП). Свободные переменные терма - переменные не связанные знаком λ в абстракции.
>Нам не важно что представляют собой данные...
Как это не важно, если различие - по смыслу (т.е. в операционной семантике). Понять, что такое ИП-замыкания, и как ими пользоваться, можно лишь в рамках императивной модели вычислений.
>Это значит, что писать программу надо как набор математических выражений...
Всё это касается аксиоматической семантики, которая в общем случае не чувствительна к вычислительной модели. Я, вообще, сомневаюсь, что понятие замыкания может иметь какое-нибудь место в аксиоматической семантике.
Кроме того, невозможно определять алгоритм (т.е. программировать) вне какой-нибудь вычислительной модели.
>Программиста на ФЯП ... не волнует ... то, как он (порядок вычислений) осуществляется: аппликативно, императивно.
Как же не волнует? Операционная семантика, возможно, самое важное на что постоянно мысленно опирается программист при программировании. Во всяком случае, это принципиально важно для понимания замыканий (как минимум в ИП), как я уже писал.
>в случае, если компилятор транслирует код в императивный язык
Я не рассматриваю реализацию. Вроде же договорились.
>Т.е. аппликативность - не признак ФП. Признак ФП - декларативность.
Нет. Аппликативность - именно признак ФП. Декларативность - скорее признак декларативных определений и целых языков (которые могут не относиться к программированию).
Аноним 03/09/17 Вск 10:43:01  1056403
>>1056372
>У терма нет данных
Любой терм может быть данными (как же ты читал SICP, а значит и немного знаком с лиспом, если не знаешь такой простой вещи?).

>Как это не важно,
А вот так. Замыкание и там, и там - это одно и тоже замыкание, достаточно абстрагироваться от модели вычислений, выше я давал такое определение замыкания, оторванное от.

>Всё это касается аксиоматической семантики,
И декларативной тоже.

>Кроме того, невозможно определять алгоритм (т.е. программировать) вне какой-нибудь вычислительной модели.
В том, то и дело, что в декларативных языках, коими являются ФП языки, нет никаких алгоритмов и даже не определена модель вычислений.

>Нет. Аппликативность - именно признак ФП.
Зачем ты себе это придумал?
Аноним 03/09/17 Вск 11:05:12  1056407
>>1056403
>Любой терм может быть данными
Поясни свою мысль. В каком смысле терм может быть данными?
>немного знаком с лиспом
Не особо я с ним знаком.
>Замыкание и там, и там - это одно и тоже замыкание, достаточно абстрагироваться от модели вычислений
Чисто формальная аналогия более-менее понятна, но, когда я использую замыкания в ИП, я всегда имею в виду их императивную семантику (это существенно), а не только синтаксис.
>И декларативной тоже.
Что есть декларативная семантика?
>В том, то и дело, что в декларативных языках, коими являются ФП языки, нет никаких алгоритмов и даже не определена модель вычислений.
Ну это уж совсем ересь. У меня просто нет слов.
Невозможно программировать вне вычислительной модели. Никак.
Декларативные языки, такие как языки разметки или языки запросов к БД, не фиксируют вычислительную модель. Но языки программирования обязательно её имеют, потому что на этих языках кодируются алгоритмы. Понятия алгоритма нет вне вычислительной модели.
>Зачем ты себе это придумал?
Не придумывал. Так и есть. Каждый раз, когда я программирую на хаскеле, только его семантика и позволяет мне программировать (т.е. определять именно алгоритм, а не спецификацию или что-то ещё).
Аноним 03/09/17 Вск 16:36:52  1056592
>>1056407
>Поясни свою мысль. В каком смысле терм может быть данными?
Например это может быть нумерал Чёрча.

>Не особо я с ним знаком.
Значит ты не читал SICP.

>(это существенно)
А почему это существенно-то?

>а не только синтаксис.
Не о синтаксисе речь вообще.

>Что есть декларативная семантика?
Код рассматривается как декларация, а не как действие.

>Невозможно программировать вне вычислительной модели. Никак.
Почему нельзя? Поясни.

>Декларативные языки, такие как языки разметки или языки запросов к БД, не фиксируют вычислительную модель
Функциональные и логические тоже.

>Но языки программирования обязательно её имеют
Не обязательно. Сам привел в пример языки программирования. В том числе, язык программирования не обязан быть тьюринг-полным, если ты об этом.

>Каждый раз, когда я программирую на хаскеле
Но ты же не пишешь алгоритм, ты пишешь декларации функций.
Аноним 03/09/17 Вск 17:27:36  1056632
>Например это может быть нумерал Чёрча.
А что такое? Термы как термы. В каком смысле они - данные?
>Значит ты не читал SICP.
Читал то, что было нужно/интересно. С лиспом не разбирался.
>А почему это существенно-то?
Ну, чтобы их осознанно применять, нужно понимать смысл проблемы, которую они помогают решить. А это можно сделать, лишь имея в виду императивную семантику.
>Не о синтаксисе речь вообще.
Но сходство чисто формальное, я бы даже сказал, графическое. А семантики совсем разные.
>Код рассматривается как декларация, а не как действие.
Значит, вычислительная модель не предусмотрена, и мы имеем дело с каким-то декларативным языком, который не является языком программирования (как, например, языки разметки или запросов к БД или что-то ещё).
>Почему нельзя? Поясни.
Уже писал ведь. Повторю. Языки программирования обязательно имеют вычислительную модель и операционную семантику (придающую смысл синтаксически правильным выражениям в вычислительной модели), потому что на этих языках кодируются алгоритмы. Понятия алгоритма нет вне вычислительной модели.
>Функциональные и логические тоже.
Но это не так. Тогда на них нельзя было бы программировать реально вычисляемые программы. Хаскель совершенно точно имеет аппликативную семантику.
>В том числе, язык программирования не обязан быть тьюринг-полным, если ты об этом.
Я не совсем об этом. Я говорю, что язык программиорвания должен иметь семантику, которая точно указывает, как будут вычисляться выражения.
>Но ты же не пишешь алгоритм, ты пишешь декларации функций.
Я определяю именно алгоритм.
Аноним 03/09/17 Вск 18:57:11  1056665
>>1056632
>А что такое? Термы как термы. В каком смысле они - данные?
В том смысле, что они семантически - натуральные числа.

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

>Языки программирования обязательно имеют вычислительную модель
>Я говорю, что язык программиорвания должен иметь семантику, которая точно указывает, как будут вычисляться выражения.
Какую вычислительную модель использует HTML, формально, это язык программирования?

>Я определяю именно алгоритм.
Когда ты пишешь на хаскеле f = 1 , ты не определяешь алгоритм, ты декларируешь, что ты буковкой обозначил число, а вот в императивщине определен именно алгоритм: положить в ячейку памяти число.
Аноним 03/09/17 Вск 19:50:34  1056697
>>1056665
>В том смысле, что они семантически - натуральные числа.
В некоторой денотационной семантике над λ-исчислением.
Нумералы Чёрча - абстракции вида n = λ s z. (sⁿ z) ≡ λ s z. s (s (s … (sz))…) в нормальной форме. Когда ты говоришь, что нумералы Чёрча могут быть данными, что конкретно ты имеешь в виду?
>это инструмент для инкапсуляции
Я этого как раз не понял и просил привести пример.
>Какую вычислительную модель использует HTML, формально, это язык программирования?
Я не очень хорошо разбираюсь в HTML, но думаю, что никакую, потому что это язык разметки веб-страниц (а не программирования).
>Когда ты пишешь на хаскеле f = 1 , ты не определяешь алгоритм, ты декларируешь, что ты буковкой обозначил число, а вот в императивщине определен именно алгоритм: положить в ячейку памяти число.
Ну и что? Выражение "f = 1" имеет разный смысл в разных языках. В хаскеле это определяет именованный терм-значение (либо терм в нормальной форме, либо атом), который означивается в себя. Это алгоритм. В ИП - это присваивание, со своей императивной семантикой.
Аноним 03/09/17 Вск 19:57:59  1056700
>>1056697
>Я этого как раз не понял и просил привести пример.
Я привел пример. В SICP есть пример.

>потому что это язык разметки веб-страниц (а не программирования).
Формально он является языком программирования.

>который означивается в себя. Это алгоритм
Означивающийся в себя - это атом (f в f). А здесь именно декларация (f в 1). И это не алгоритм, здесь нет описания действия.
Аноним 03/09/17 Вск 20:00:01  1056702
>>1056697
>нумералы Чёрча могут быть данными, что конкретно ты имеешь в виду?
Вот что:
Данные — зарегистрированная информация; представление фактов, понятий или инструкций в форме, приемлемой для общения, интерпретации, или обработки человеком или с помощью автоматических средств.
Аноним 03/09/17 Вск 20:07:43  1056711
>>1056700
>В SICP есть пример.
Можешь по-точнее сослаться?
>Формально он является языком программирования.
Я слишком поверхностно знаком с HTML, но я сильно сомневаюсь, что языки разметки нуждаются в какой-то вычислительной модели.
>Означивающийся в себя - это атом (f в f). А здесь именно декларация (f в 1).
Да нет. Я говорю 1 означивается в 1. f - это имя в тексте программы, в семантике его нет.
>И это не алгоритм, здесь нет описания действия.
1 - это значение (т.е. дальнейшие редукции невозможны). Но это корректный терм, т.е. алгоритм.
Аноним 03/09/17 Вск 20:16:15  1056716
>>1056702
>Данные — зарегистрированная информация; представление фактов, понятий или инструкций в форме, приемлемой для общения, интерпретации, или обработки человеком или с помощью автоматических средств.
Словом: любая информация? В таком случае любые термы (в т.ч. и нумералы Чёрча) - это данные. Но ранее (здесь >>1055686) ты говорил, что в ФП есть хранимые данные (полагаю это не любая информация). Это я и не понял, что тут имелось в виду. Я говорил о том, что свободные переменные терма в ФП никак не могут быть "хранимыми данными".
Аноним 03/09/17 Вск 22:19:47  1056807
>>1056716
>Можешь по-точнее сослаться?
Там куда ни плюнь одни замыкания: фактически, программирование в Лиспах строится на замыканиях в том, или ином виде. Открывай книгу и изучай.

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

>f - это имя в тексте программы, в семантике его нет.
Идентификаторы являются неотъемленной частью семантики языка. А вычислитель обязан знать, что означает тот, или иной идентификатор.

>В таком случае любые термы (в т.ч. и нумералы Чёрча) - это данные
Да. Любые термы могут быть как данными, так и кодом. Нумералы Чёрча - самый очевидный представитель данных. Этакий дуализм кода и данных.

>Я говорил о том, что свободные переменные терма в ФП никак не могут быть "хранимыми данными".
Свободные переменные в замыканиях связаны с какими-нибудь термами.
Аноним 04/09/17 Пнд 07:54:10  1056919
>>1056807
>Там куда ни плюнь одни замыкания: фактически, программирование в Лиспах строится на замыканиях в том, или ином виде. Открывай книгу и изучай.
Да там много упоминаются замыкания, но вот что написано в сноске на стр. 106 в моём издании:
>К сожалению, в сообществе программистов, пишущих
на Лиспе, словом «замыкание» обозначается еще и совершенно другое понятие: замыканием называют способ
представления процедур, имеющих свободные переменные. В этом втором смысле мы слово «замыкание» в
книге не используем.
>Не нуждаются, и в то же время они являются языкам программирования.
Не понимаю, зачем бы. В любом случае, если нет вычислительной модели, то программировать на языке невозможно.
>Идентификаторы являются неотъемленной частью семантики языка. А вычислитель обязан знать, что означает тот, или иной идентификатор.
Я имею в виду операционную семантику (погружение программы в вычислительную модель). Здесь идентификаторов (имён присвоенных термам в исходном коде программы) нет (в ФП).
>Этакий дуализм кода и данных.
Что за дуализм то? Ты же сам определил данные как (почти) любую информацию, а теперь подозреваешь какой-то важный дуализм.
>Свободные переменные в замыканиях связаны с какими-нибудь термами.
Не связаны они ни с какими термами - они свободные. Если свободная переменная в некотором терме связывается (в абстракции) в каком-то его надтерме, то в какой-нибудь аппликации, в которой этот надтерм стоит в левой части, при редукциях произойдёт подстановка правой части вместо этой (уже связанной) переменной. И больше ничего. Никаких хранимых данных.
Аноним 04/09/17 Пнд 09:36:10  1056925
>>1056919
>на Лиспе, словом «замыкание» обозначается еще и совершенно другое понятие: замыканием называют способ представления процедур, имеющих свободные переменные. В этом втором смысле мы слово «замыкание» в книге не используем.
Означает, что термин "замыкание" несет еще и такой смысл и они во избежание путаницы применяют этот термин только для одного смысла. Что ты хотел этим показать?

>то программировать на языке невозможно.
Но на html пишут программы и они даже могут исполняться: браузерами, поисковыми ботами итд. При этом программист даже не задумывается о модели вычисления, ему это знать не надо.

>Что за дуализм то?
Нет различия между кодом и данными. Любой терм можно считать кодом, а можно считать и данными.

>Не связаны они ни с какими термами
>Если свободная переменная в некотором терме связывается
Сам-то противоречия в словах своих не видишь? Не важно каким образом происходит дальнейшее вычисление, важно, что связывание имеет место быть.

>Никаких хранимых данных.
Если терм находится в какой либо из нормальных форм - то он является данными. Вычислитель не может его редуцировать просто по определению нормальной формы.
Аноним 04/09/17 Пнд 10:09:02  1056930
>>1056925
>Что ты хотел этим показать?
Я хотел уточнить, какой именно пример из SICP посмотреть, чтобы понять твою мысль о том, что "замыкания в ФП - это инструмент для инкапсуляции". Но в сноске написано, что в книге замыкания в смысле "процедур, имеющих свободные переменные" не рассматриваются.
>Но на html пишут программы...
Ну значит у него есть вычислительная модель (я же говорю, я не большой знаток HTML).
>программист даже не задумывается о модели вычисления, ему это знать не надо
Думаю, это печально.
>Нет различия между кодом и данными. Любой терм можно считать кодом, а можно считать и данными.
Это трюизм, если, как ты говоришь, под данными понимать просто всякую информацию. Это можно усматривать в любом языке (да вообще везде, где есть какой-то код).
>Сам-то противоречия в словах своих не видишь?
Какое противоречие? Свободные переменные - они свободные в некотором терме, т.е. не связаны в нём знаком λ в абстракции. В некотором надтерме этого терма эти же переменные уже могут быть связанными.
>Не важно каким образом происходит дальнейшее вычисление, важно, что связывание имеет место быть.
Я не понял, что ты этим хочешь сказать. Какое всё это имеет отношение к "хранимым данным"?
>Если терм находится в какой либо из нормальных форм - то он является данными.
Что это значит? В каком смысле данными? Теперь ты полагаешь, что данные = терм в нормальной форме? Пусть так, но тогда по прежнему: терм в нормальной форме ≠ "хранимые данные". Хранимых данных в аппликативной модели нет. Действительно в хаскеле есть какие-нибудь императивные IO-переменные, но они, разумеется, вне аппликативной семантики и, уже хотя бы поэтому не имеют отношения к замыканиям (незамкнутым подтермам).
Аноним 04/09/17 Пнд 11:10:48  1056938
>>1056930
>Но в сноске написано, что в книге замыкания в смысле "процедур, имеющих свободные переменные" не рассматриваются.
Не замыкания не рассматриваются, а они так их не называют. Не чувствуешь разницы?
Процедуры со свободными переменными они используют и рассматривают постоянно.

>Это можно усматривать в любом языке (да вообще везде, где есть какой-то код).
В МТ инструкции и данные разделены.

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

>Теперь ты полагаешь, что данные = терм в нормальной форме?
Например так. Или в слабой заголовочной нормальной форме. В любой нормальной форме, какую можно придумать.

>терм в нормальной форме ≠ "хранимые данные"
Почему не равно-то? Пока происходят вычисления других термов, они где-то хранятся же.
Аноним 04/09/17 Пнд 11:40:08  1056942
>>1056938
>Не замыкания не рассматриваются, а они так их не называют. Не чувствуешь разницы?
В сноске написано дословно: "на Лиспе, словом «замыкание» обозначается еще и совершенно другое понятие: замыканием называют способ представления процедур, имеющих свободные переменные. В этом втором смысле мы слово «замыкание» в книге не используем". Это написано в разделе, где замыкания используются, но не те, а в другом смысле.
>В МТ инструкции и данные разделены.
В МТ инструкции - правила перехода. В обобщённой МТ (на которой можно "кодировать" все другие МТ) инструкции - на ленте, но в общем-то отличимы от другой информации на ленте. Здесь данные (информация), которые хранятся на ленте - хранимые данные. Это второе значение слова "данные", которое я привёл здесь >>1056372. Ты же говорил о данных как о любой информации (здесь >>1056702), затем ты стал рассматривать данные как термы в нормальной форме (значит, только в ФП). Всё это весьма разные значения. Я уже запутался, что ты имеешь в виду. Когда я говорил про трюизм дуализма, я имел в виду твоё первое значение.
>В самом терме они свободные, в надтерме связанные. Поэтому надтерм можно рассматривать как лексическое окружение терма.
Так о том и речь. Где здесь противоречие?
>Почему не равно-то?
Смысл (то есть семантика) разный.
>Пока происходят вычисления других термов, они где-то хранятся же.
Что значит "пока" и "храниться" в аппликативной семантике? Напомню, реализацию мы не рассматриваем.
Аноним 04/09/17 Пнд 12:34:23  1056970
>>1056942
>Это написано в разделе, где замыкания используются, но не те, а в другом смысле.
А те, которые мы ищем используются по всей книге, только их не называют замыканиями для избежания путаницы.

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

>Что значит "пока" и "храниться" в аппликативной семантике?
Пока не началась бета редукция с участием этого подтерма, подтермы не одновременно редуцируются, а в определенном порядке. А хранится - где-то эти термы же записаны в каком-то виде, пока не совершается редукция с их участием.
Аноним 04/09/17 Пнд 12:34:52  1056971
>>1056938
>Они так их не называют.
А как они их называют? Как мне найти подходящий пример?
Аноним 04/09/17 Пнд 13:00:33  1056981
>>1056970
>В ФП же одни и те же данные могут быть как данными над которыми совершаются вычисления, так и данными, которые описывают эти вычисления.
В каком смысле "данные"? В смысле "любая информация"? Другими словами: и инструкции и неинструкции в программе - это некоторая информация. Тогда, согласен. Но это в равной степени верно и для ФП и для ИП. Поэтому, такой дуализм бессодержателен.
>Пока не началась бета редукция с участием этого подтерма, подтермы не одновременно редуцируются, а в определенном порядке.
"Пока не началась бета редукция", "одновременно", "хранится" - нет таких понятий в аппликативной модели (а, значит, и в ФП).
>А хранится - где-то эти термы же записаны в каком-то виде, пока не совершается редукция с их участием.
Все термы написаны в тексте программы. Никуда их больше писать не надо.

Нет смысла рассматривать реализацию. В реализации ФП-языка авторы могут сколько понадобится использовать императивные замыкания (если они допустимы в том языке, на котором пишется реализация). Там это вполне осмысленно, т.к. ФП-язык реализуется на тьюринг-архитектуре. Но для прикладного программиста это не имеет значение, скорее всего он об этом даже не узнает. Прикладной ФП программист программирует строго в рамках аппликативной модели и императивные замыкания ему никак не доступны.
Аноним 04/09/17 Пнд 13:08:11  1056985
>>1056971
Там же примеры на лиспе. Нельзя ли на хаскеле? Не хотелось бы мне сейчас разбираться с лиспом.
Аноним 04/09/17 Пнд 13:41:00  1056995
>>1056981
>это некоторая информация
Не просто некоторая информация. В ИП не над всей информацией можно проводить вычисления и не вся информация является описанием вычислений, это два непересекающихся подмножества всей информации. В ФП информация не делится на подобные подмножества.

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

>Все термы написаны в тексте программы. Никуда их больше писать не надо.
Ага, и вычислять её тоже не надо. А вот процессе вычисления могут возникать новые термы, отличные от исходных.
Все равно, что сказать, что вся императивная программа написана в тексте программы, больше никуда ее писать не надо, да и вычислять тоже.
Аноним 04/09/17 Пнд 13:42:44  1056996
>>1056985
На хаскеле это ровно то, что писалось раньше: терм со свободными переменными. В терминах SICP это называется "процедура со свободными переменными".
Аноним 04/09/17 Пнд 13:59:57  1056999
>>1056996
Ну как тогда связать такие ФП-замыкания с тем что - это "инструмент для инкапсуляции"? Я хотел увидеть, как это работает.
Аноним 04/09/17 Пнд 14:19:31  1057005
>>1056999
Инкапсуляция - это объединение кода и данных в единый компонент. Замыкание как раз и выполняет эту функцию.
Аноним 04/09/17 Пнд 14:38:46  1057011
>>1056995
>Не просто некоторая информация. В ИП не над всей информацией можно проводить вычисления и не вся информация является описанием вычислений, это два непересекающихся подмножества всей информации. В ФП информация не делится на подобные подмножества.
Да это понятно. Ты вот здесь >>1056925 писал
>Нет различия между кодом и данными. Любой терм можно считать кодом, а можно считать и данными.
В ФП данных (хранимых) нет, поэтому и различия нет, и терм считать данными (хранимыми) нельзя. А если данные понимать как просто информацию, то утверждение о том, что данными является всё в программе - трюизм и в ФП и в ИП. Вот чём я говорю.
>Так, давай тогда тащи определение аппликативной модели.
Было уже. Какой-нибудь вариант λ-исчисления или комбинаторной логики.
>говоришь, что нет бета-редукций.
Я говорю, утверждение "Пока происходят вычисления других термов..." не имеет смысл в аппликативной модели.
>Ага, и вычислять её тоже не надо. А вот процессе вычисления могут возникать новые термы, отличные от исходных.
>Все равно, что сказать, что вся императивная программа написана в тексте программы, больше никуда ее писать не надо, да и вычислять тоже.
Все эти вопросы стоят перед тем, кто имплементирует ФП-язык на императивной архитектуре. Для прикладного ФП-программиста они не имеют смысла, если он строго придерживается аппликативной семантики. Я всё это к тому, что терм в нормальной форме ≠ "хранимые данные" (терм в нормальной форме - в ФП-семантике, хранимые данные - в ИП-семантике). Давай, как и условились, оставим вопросы реализации, они не имеют отношения к замыканиям.
Аноним 04/09/17 Пнд 14:42:15  1057012
>>1057005
Так ведь нет никаких хранимых данных в ФП.
Я хочу увидеть пример "инкапсуляции" в ФП, чтобы понять, как осмысленно использовать замыкания в ФП.
Аноним 04/09/17 Пнд 15:31:27  1057025
>>1057012
>В ФП данных (хранимых) нет
Но где-то термы хранятся же (пусть и записанными на листочке бумажки.

>Какой-нибудь вариант λ-исчисления или комбинаторной логики.
>Я говорю, утверждение "Пока происходят вычисления других термов..." не имеет смысл в аппликативной модели.
В лямбда-исчислении вычисление представляет собой цепочку бета-редукций и "Пока происходят вычисления других термов..." обретает смысл.
Аноним 04/09/17 Пнд 15:40:59  1057028
>>1057025
>Но где-то термы хранятся же (пусть и записанными на листочке бумажки.
Да пусть они хранятся где это угодно авторам имплементации. Семантический смысл хранению данных в ФП придать нельзя.
>В лямбда-исчислении вычисление представляет собой цепочку бета-редукций и "Пока происходят вычисления других термов..." обретает смысл.
>Только если каким-нибудь внешним образом добавить темпоральность к редукциям (то есть отношение раньше-позже-одновременно). В чистом λ-исчислении и CL такого нет.
Аноним 04/09/17 Пнд 15:50:06  1057029
>>1057012
>Я хочу увидеть пример "инкапсуляции" в ФП, чтобы понять, как осмысленно использовать замыкания в ФП.
Ооо, я пока писал ответ подумал, что если подходить к вопросу так, как ты, то термином замыкание в ФП надо пользоваться только на этапе написания программы, а не во время вычисления. И "свободная переменная потом свяжется" относится к процессу написания программы, т.е. в одном месте программы пишем терм, а затем в другом связываем свободные переменные в этом терме. Можешь осмысленно так пользоваться, если хочешь.
Аноним 04/09/17 Пнд 15:53:26  1057030
>>1057028
>Да пусть они хранятся где это угодно авторам имплементации. Семантический смысл хранению данных в ФП придать нельзя.
Формат хранения не оговорен, потому, что не важен. Но храниться где-то должны. Иначе откуда его вычислитель брать будет?
Аноним 04/09/17 Пнд 15:55:16  1057031
>>1057029
В хаскеле все самостоятельные (т.е. именованные) термы замкнуты.
Аноним 04/09/17 Пнд 15:57:57  1057032
>>1057030
>Формат хранения не оговорен, потому,
Дело не в формате. Еще раз в аппликативной семантике самого понятия "хранение данных" нет.
Всё это вопросы имплементации.
Аноним 04/09/17 Пнд 16:04:43  1057035
>>1057032
И где термы сидят, когда мы о них говорим? Может и нет никаких термов?

>>1057031
Но могут содержать незамкнутые, вот они-то и есть замыкания.
Аноним 04/09/17 Пнд 16:11:47  1057039
>>1057035
>И где термы сидят, когда мы о них говорим?
Нигде они не сидят. Программист их просто пишет в тексте программы и всё.
>Но могут содержать незамкнутые, вот они-то и есть замыкания.
Да это я понял. Проблема в том, что я не вижу, чтобы они соответствовали по смыслу (семантически) императивным замыканиям, а только внешне. Поэтому не понятно, как их осознанно применять в ФП (в каких ситуациях я должен понять: "Ага, а вот тут мне помогут замыкания" и использовать их?).
Аноним 04/09/17 Пнд 16:29:31  1057054
>>1057039
>Нигде они не сидят. Программист их просто пишет в тексте программы и всё.
Тогда при чем тут аппликативная семантика? Самая настоящая денотационная. Ни намека на вычислительный процесс, или алгоритм.

>чтобы они соответствовали по смыслу (семантически) императивным замыканиям, а только внешне
Императивные замыкания и называются замыканиями, потому, что внешне похожи на ФП замыкания (откуда название и идея родом).

>Ага, а вот тут мне помогут замыкания
Императивные замыкания не помогут (их нет). А ФП замыкания - уже тысячу раз тут обсудили -- это просто название для терма определенного вида и всё.

Аноним 04/09/17 Пнд 16:38:32  1057058
>>1057054
>Тогда при чем тут аппликативная семантика? Самая настоящая денотационная. Ни намека на вычислительный процесс, или алгоритм.
Как причём? ФП-язык имеет аппликативную семантику. Алгоритм - терм. Вычисление - редукция терма до значения.
>Самая настоящая денотационная.
Почему денотационная?
>А ФП замыкания - уже тысячу раз тут обсудили -- это просто название для терма определенного вида и всё.
Тогда я повторяю свой вопрос-предположение >>1055463
Аноним 04/09/17 Пнд 17:02:39  1057067
>>1057058
Как причём?
>Почему денотационная?
Потому, что записываются чистые математические выражения в немного другом синтаксисе:
[hask] f x = x +1 == [math] f(x) = x + 1

>>1057058
>Тогда я повторяю свой вопрос-предположение
>Я берусь за хаскель, а в хаскеле замыкания не используются.
Как выяснили, используются ФП-замыкания, на которые ИП-замыкания одинаковые по форме и похожи по смыслу. Но таки да, ИП-замыкания ты используешь как костыль.
Аноним 04/09/17 Пнд 17:03:54  1057070
>>1057067
>на которые
с которыми ... одинаковы
Аноним 04/09/17 Пнд 17:11:47  1057077
>>1057067
>Потому, что записываются чистые математические выражения...
Программист на ФП записывает термы.
>похожи по смыслу
Как же похожи по смыслу, если семантика переменных в ФП и ИП разная? Вызов процедуры в ИП и сокращение редекса в ФП тоже различаются семантически.
Аноним 04/09/17 Пнд 17:46:19  1057086
>>1057077
>Программист на ФП записывает термы.
Программист на lambda calculus. А программист на ФП - математические выражения. Последние можно определить в терминах lambda calculus (как и программу в ИП в терминах МТ).

>Как же похожи по смыслу, если семантика переменных в ФП и ИП разная? Вызов процедуры в ИП и сокращение редекса в ФП тоже различаются семантически.
Похожи, хоть и не одинаковы. Абстракции, как и процедуры несут в себе информацию о том, что делать с переменными (точнее с тем, что связано с этими переменными), а переменные используются как обозначения данных (термов / ячеек памяти). Этот смысл абстрагирован от вычислительной модели, а дальше начинаются детали, которые различны и не существенны для программиста (если последний не использует замыкания в ИП в смысле костыля для преодоления трудностей фунарга).
Аноним 04/09/17 Пнд 18:10:13  1057094
>>1057086
>А программист на ФП - математические выражения.
Нет, именно термы. Написанное будет вычисляться строго в соответствии с операционной семантикой. А денотационная семантика термов в ФП и процедур в ИП факультативна.
>переменные используются как обозначения данных (термов...
В ФП переменные не используются как обозначение термов, они используются для указания мест в терме, куда будут подставляться термы при сокращении редекса.
>Похожи, хоть и не одинаковы.
И самое плохое, что понимание ФП замыкания никак не поможет ИП программисту лучше понять ИП-замыкания. Какой толк писать, что замыкания - из ФП, если в самом ФП их роль весьма фиктивная. Программист просто пишет термы, какие ему нужны, и в них, как бы сами собой, "возникают" незамкнутые подтермы. ФП программист всё время безотчётно плодит "такие замыкания", и концентрироваться на них нет никого смысла.
Аноним 05/09/17 Втр 10:16:40  1057335
>>1057094
>Нет, именно термы.
Тогда при чем здесь комбинаторная логика? В ней нет термов, в ней есть комбинаторы, которые определяются как одноместные функции.

>А денотационная семантика процедур ИП
Процедуры ИП в общем случае не обладают денотационной семантикой (например, x+=1). Выражения в ФП - все поголовно.

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

>В ФП переменные не используются как обозначение термов, они используются для указания мест в терме,
Именно, именованное место в терме. Почти совсем как в ИП - именованное место на ленте.

>И самое плохое, что понимание ФП замыкания никак не поможет ИП программисту лучше понять ИП-замыкания.
Замыкание - это описание вычислений в теле которого есть свободные переменные. Что тут еще надо понимать-то? То, что это иногда используется как костыль в ИП? Конечно тебе ФП не расскажет об этом.
Аноним 05/09/17 Втр 11:03:46  1057362
>>1057335
>В ней нет термов, в ней есть комбинаторы, которые определяются как одноместные функции.
CL-термы, они же комбинаторы. В λ-исчислении им соответствуют замкнутые термы. CL-термы определяются либо своими комбинаторными характеристиками, либо выражаются в виде аппликаций других CL-термов. Причём тут одноместные функции?
>Процедуры ИП в общем случае не обладают денотационной семантикой (например, x+=1). Выражения в ФП - все поголовно.
Ну так я и говорю, денотационная семантика факультативна. Если нужно и удалось указать отображение корректных выражений языка в выбранный математический домен, значит задана некоторая денотационная семантика. Но это не обязательно. Операционная же семантика языка программирования имеется всегда.
>Операционная семантика Хаскеля понадобится только на этапе оптимизации программ. При программировании на Хаскеле в остальном большинстве случаев достаточно его денотационной семантики.
Программировать не опираясь на операционную семантику - всё равно, что программировать вслепую. Не думаю, что в общем случае достаточно денотационной семантики, тем более, что в обще случае она не гарантирована. Вот, к примеру, какой смысл имеют ФП-замыкания в какой-нибудь денотационной семантике?
>Почти совсем как в ИП - именованное место на ленте.
Но терм - не лента памяти. Вообще ничего общего.
>Замыкание - это описание вычислений в теле которого есть свободные переменные. Что тут еще надо понимать-то?
Проблема в том, что использование замыканий в ФП и ИП разительно отличается.
Аноним 05/09/17 Втр 12:01:21  1057365
>>1057362
>Причём тут одноместные функции?
Потому что они такие функции.
https://en.wikipedia.org/wiki/Combinatory_logic
A combinator is a higher-order function that uses only function application and earlier defined combinators to define a result from its arguments.

>Операционная же семантика языка программирования имеется всегда.
Не всегда (декларативные языки разметки). Но денотационная семантика хаскеля позволяет не думать об операционной семантике хаскеля. В ИП такое невозможно.

>Вот, к примеру, какой смысл имеют ФП-замыкания в какой-нибудь денотационной семантике?
Именно такой как и в определении. Функция со свободными переменными.

>Но терм - не лента памяти. Вообще ничего общего.
Общее здесь - "именованное место".

>Проблема в том, что использование замыканий в ФП и ИП разительно отличается.
Вообще нет, если использовать замыкание в точности с его определением, а не в качестве костыля.
Аноним 05/09/17 Втр 12:34:05  1057377
>>1057365
>Потому что они такие функции.
Так а почему одноместные то? Вообще говорить о термах как о фунциях, значит иметь в виду их денотационную семантику. В чистом λ-исчислении и CL такого нет. И термы там определяются не как функции.
>Не всегда (декларативные языки разметки).
Но я то говорю о языках программирования.
>Но денотационная семантика хаскеля позволяет не думать об операционной семантике хаскеля.
В каких то специальных случаях, когда это действительно так и есть. Это верно и для ИП.
>Функция со свободными переменными.
Так а что это? В каком домене?
>Общее здесь - "именованное место".
Что-то я упустил нить. Что ты сказать то хочешь. Я имел в виду только, что в ФП переменные не используются как обозначение термов
>а не в качестве костыля.
Но факт в том, что в ИП это костыль. Если бы я был структурным лингвистом, я сказал бы, что замыкания в ИП и в ФП отличаются прагматически.
Аноним 05/09/17 Втр 13:01:52  1057387
>>1057377
>Так а почему одноместные то?
С одним аргументом потому что.

>И термы там определяются не как функции.
Еще раз ссылку на общепринятое определение комбинатора дать?

>В каких то специальных случаях, когда это действительно так и есть. Это верно и для ИП.
Приведи в пример случай, где важна операционная семантика Хаскеля и без нее невозможно понять что вычисляет, тот, или иной кусок кода.

>Так а что это?
Например, f(x) = a + x

>Что-то я упустил нить. Что ты сказать то хочешь. Я имел в виду только, что в ФП переменные не используются как обозначение термов
Я неправильно выразил свою мысль, назвав обозначением терма, а не обозначением места для терма.
Аноним 05/09/17 Втр 13:30:54  1057398
>>1057387
>С одним аргументом потому что.
Для K-комбинатора, например, вполне возможна денотационная семантика, где ему соответствует двухместная некаррировнная функция.
>Еще раз ссылку на общепринятое определение комбинатора дать?
Полагаю, правильное лучше общепризнанного.
>Приведи в пример случай, где важна операционная семантика Хаскеля и без нее невозможно понять что вычисляет, тот, или иной кусок кода.
Все случаи, где нужно представлять, как идут редукции, на каких термах они останавливаются, как термы типизируются.
>Например, f(x) = a + x
Так это в домене какого-нибудь кольца многочленов. А в общем-то случае как?
Аноним 05/09/17 Втр 13:49:36  1057404
>>1057398
>вполне возможна денотационная семантика
Возможна, но в семантике комбинаторной логики это одноместная функция по определению.

>Полагаю, правильное лучше общепризнанного.
https://en.wikipedia.org/wiki/Combinatory_logic

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

>А в общем-то случае как?
Функция со свободными переменными.
Аноним 05/09/17 Втр 14:11:18  1057410
>>1057404
>Возможна, но в семантике комбинаторной логики это одноместная функция по определению.
Как в самой CL определяются CL-термы я уже писал. В чистой CL не предусмотрена никакая денотационная семантика, только операционная.
>https://en.wikipedia.org/wiki/Combinatory_logic
Зачем это. Я лучше бы сослался на Карри или Барендрегта, ну или, на худой конец, на какой нибудь неплохой учебник.
>Я просил конкретный пример, а не то же утверждение, сказанное другими словами.
Ну а какой такой случай? Каждый раз когда встречаем или придумываем новый терм, чтобы понять его и проделать с ним всё, о чём я сказал, нужно опираться на операционную семантику.
>Функция со свободными переменными.
Так вот, полагаю, такого достаточно общего домена не найдётся но это не точно. И понимать ФП-замыкания в общем случае нужно в смысле аппликативной семантики.
Аноним 05/09/17 Втр 14:33:58  1057419
>>1057410
>Зачем это. Я лучше бы сослался на Карри или Барендрегта, ну или, на худой конец, на какой нибудь неплохой учебник.
Ну так процитируй это правильное определение.

>Ну а какой такой случай?
Просто кусок кода, смысл которого невозможно понять без привлечения знаний об операционной семантике Хаскеля.

>полагаю, такого достаточно общего домена не найдётся
Для начала define достаточно общий домен, там и поищем.
Аноним 05/09/17 Втр 15:12:00  1057435
>>1057419
>Ну так процитируй это правильное определение.
Зачем? То, которое я привёл, разве неправильное? Чем оно отличается от того, что в литературе?
>Просто кусок кода, смысл которого невозможно понять без привлечения знаний об операционной семантике Хаскеля.
Да любой кусок кода. Повторяю, денотационная семантика не заменяет операционную. Она позволяет уточнить математический смысл выражений, выяснять правильно ли будет оно вычисляться в домене-модели. Чтобы мы могли убедиться, что то, что мы написали, соответствует нашим намерениям. Это расширяет возможности для изучения программы, как решения некоторой математической задачи.
>Для начала define достаточно общий домен, там и поищем.
Такой домен, в который отображаются все ФП-замыкания.

Я не понимаю уже, о чём этот спор. Про ФП-замыкания я в основном выяснил. Итог: нафиг не нужны "такие замыкания"
Аноним 05/09/17 Втр 15:18:59  1057439
>>1057435
>Зачем? То, которое я привёл, разве неправильное? Чем оно отличается от того, что в литературе?
От википедии (ссылку привел) отличается. А ты так и не привел ссылку на более авторитетное определение.

>Она позволяет уточнить математический смысл выражений, выяснять правильно ли будет оно вычисляться в домене-модели.
Ой вэй, "уточнить смысл математических выражения" как это? Математические выражения не достаточно точные? Поясни. Все-таки пример такого кода не помешал бы, иначе так и будешь плясать вокруг да около.

>Итог: нафиг не нужны "такие замыкания"
Твое право не пользоваться этим термином.
Аноним 05/09/17 Втр 15:44:41  1057464
>>1057439
>не привел ссылку
Я же написал авторов.
>авторитетное определение.
Да не авторитетное, а более строгое.
>"уточнить смысл математических выражения"
...математический смысл (синтаксически правильных) выражений языка...
>Твое право не пользоваться этим термином.
Так и понятием не получится пользоваться осознанно.
Аноним 05/09/17 Втр 16:03:04  1057468
>>1057464
>Я же написал авторов.
Книгу с точностью до страницы, хотя бы.

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

>Так и понятием не получится пользоваться осознанно.
Если ты не можешь осознать, то конечно.
Аноним 05/09/17 Втр 16:19:17  1057473
>>1057468
>Книгу с точностью до страницы, хотя бы.
Барендрегт "Лямбда-исчисление. Его синтаксис и семантика", глва 7.
Wolfengagen "Combinatory logic in programming. Computations with objects through examples and exercises", chapter 2.
Hindley, Seldin "Lambda-Calculus and Combinators, an Introduction", 2A
Зачем тебе эти ссылки? К тому, что я написал про CL, какие-то претензии есть?
>Денотационной семантики хаскеля достаточно для понимания смысла этих математических выражений
Да не математических выражений а выражений языка.
>Если ты не можешь осознать, то конечно.
Ну я же выше писал в чём трудность.
Анон, мне кажется, с твоей стороны начинается какое-то тралирование.
Аноним 05/09/17 Втр 16:29:43  1057478
>>1057473
>Зачем тебе эти ссылки?
Почитать.

>Да не математических выражений а выражений языка.
Да, точно. Спасибо. Денотационной семантики хаскеля достаточно для понимания смысла этих выражений языка.

>Ну я же выше писал в чём трудность.
Не понимаю я твоей трудности в абстрагировании от вычислительной модели.
Удивительно, что у тебя не возникает вопросов по таким терминам, как "анонимные функции", "функция высших порядков", "функторы", "монады", ведь все это в итоге сводится к термам в лямбда исчислении.
Аноним 06/09/17 Срд 23:05:07  1058373
colour-logo.png (39Кб, 2187x601)
Хачкелисты, поясните за OCaml. Как он вам?
Аноним 14/09/17 Чтв 20:56:50  1062038
Котоны, почем stack такой тормозной?
Аноним 15/09/17 Птн 23:00:02  1062575
>>1058373
Говно.

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

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