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


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

Check this out!


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

Haskell-тред #5 Haskell-тред !5EJ71eKlNQ 09/04/17 Вск 09: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 Вск 09:44:04 969781
Оп-хуй. В прошлом треде прикрепил Нэша, теперь Перельмана.
От себя посоветую книгу
Christopher Allen, Julie Moronuki Haskell Programming from first principles
Она мне больше Real World Haskell понравилась
Аноним # OP  09/04/17 Вск 09:53:43 969798
>>969781
Спасибо, приебеню к следующему.
От себя рекомендую задачки на codewars для практики.
Аноним 10/04/17 Пнд 04:10:25 970711
>>969768 (OP)
Это тред одного Семёна или на борде реально есть секта хаскелистов? Впервые вижу этот тред, а он уже пятый.
Ответы: >>970717 >>970732
Аноним 10/04/17 Пнд 05:04:12 970717
>>970711
Чё сразу секта? Тред не очень активен, но в нём пишут. Другое дело, что много постов типа : "Зачем этот ваш хаскелль нужен?", "В чём суть ФП?", "ООП говно", "ФП говно".

Аноним 10/04/17 Пнд 06:31:04 970727
Давеча открыли Хачкиль-код в продакшоне:
https://github.com/wireapp/wire-server
Аноним 10/04/17 Пнд 07:07:52 970732
>>970711
Да в принципе есть народ, в следующем треде сделаю нормальную шапку, с ссылками на задачки.
Аноним 10/04/17 Пнд 10:03:57 970815
я единственный на всей доске кто забыл хашкель
щас используем эфсярп на продакшоне, хещкель не трогал уже года 2, как универ закончил
что там новенького? наследование мандадки от аппликатива уже завезли?
Ответы: >>970827
Аноним 10/04/17 Пнд 10:24:08 970827
>>970815
>наследование мандадки от аппликатива уже завезли?
Да
Аноним 10/04/17 Пнд 11:30:02 970872
Чо такое гомоморфизм, функтор, моноид, Абелевая группа и зачем концептуально они нужны?
Аноним 10/04/17 Пнд 11:44:49 970882
>>970872
Хуетень чтобы тешить чсв.
Аноним 10/04/17 Пнд 12:33:48 970909
>>970872
изучая эти понятия ты одновременно изучаешь все реальные обьекты которые обладают свойствами заданными в определениях
например если твоя мамка удовлетворяет свойствам функтора то к ней применимы все теоремы о функторах
Аноним 10/04/17 Пнд 14:37:57 970984
>>970872
> моноид
Какая-то библиотека может автоматически распараллелить код, как только увидит моноид, так как там операция ассоциативна
Аноним 10/04/17 Пнд 15: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.
Она работала, но в таком случае аргумент был вещественным числом, а надо, чтобы был комлпексным.
Ответы: >>971053
Аноним 10/04/17 Пнд 15:57:44 971053
>>971036
Разобрался сам.
Аноним 10/04/17 Пнд 22: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 Срд 13:27:14 972443
>>969781
Буду накатывать эту книгу в свободное время. Мне хуёвенько и все надоело, хочу прикоснуться к прекрасному.
А нихуя остальные его учат, интересно?
Ответы: >>981961
Аноним 13/04/17 Чтв 21:45:55 973295
Куда мне путь если я изучу Haskell? Куда я смогу заделаться? Математику знаю, но на уровне двух курсов вышки в относительной шараге.
Аноним 14/04/17 Птн 11:58:25 973511
Всем ли доступен хаскель?
Ответы: >>973522
Аноним 14/04/17 Птн 12:05:55 973522
>>973511
Только по спец. разрешениям.
Ответы: >>973525
Аноним 14/04/17 Птн 12:07:18 973525
>>973522
А гуманитарии осилившие жабу, способны ли осилить Хаскель?
Ответы: >>973541
Аноним 14/04/17 Птн 12:39:37 973541
>>973525
Вполне, но будь готов, что от всех других языков тебя потом будет тошнить, от Жавы в первую очередь.
Ответы: >>973544 >>973558
Аноним 14/04/17 Птн 12:41:42 973544
>>973541
А от Ассемблера? Тоже ЯП жеж.
Аноним 14/04/17 Птн 13:03:00 973558
>>973541
Хз, мне жаба не стала меньше нравится, уж если говорить о человеческом фп, где не нужно изворачиваться, то это скала, хочешь пиши на джаве с синтаксическим сахаром, хочешь упарывай монады и функторы, а хаскель - язык для каких-то фп фанатиков, не все вещи удобно и нужно делать в функциональном стиле так-то.
Ответы: >>973588 >>980575
Аноним 14/04/17 Птн 13:40:11 973588
>>973558
Значит, ты не дучил хаскель.
Ответы: >>973590
Аноним 14/04/17 Птн 13:42:29 973590
>>973588
Ну скажи тогда, что там такого крутого, чего нет в других фп языках?
Ответы: >>973591 >>973596 >>974628
Аноним 14/04/17 Птн 13:43:46 973591
>>973590
Удваиваю.
Аноним 14/04/17 Птн 13:48:17 973596
>>973590
Я не про это. Я говорю, что, если ты действительно освоил ФП (например хаскель), то у тебя не может не возникнуть отвращение к джаве.
Аноним 14/04/17 Птн 15:19:17 973676
Поясните, во что разворачивается эта хуйня:
fibs = 1 : scanl (+) 1 fibs

Не сам результат, а как происходит вычисление. Я всю голову сломал. То есть, 1 :, потом идет scanl, но он вызывает fibs, где снова идет 1:. Как это работает?
Ответы: >>973689
Аноним 14/04/17 Птн 15:21:56 973682
Если кто пропустил, с февраля начала выходить вторая часть видеолекций о теории категорий для программистов
https://www.youtube.com/playlist?list=PLbgaMIhjbmElia1eCEZNvsVscFef9m0dm
Аноним 14/04/17 Птн 15: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 Птн 15:38:43 973696
>>969768 (OP)
наконец-то норм шапка
Аноним 14/04/17 Птн 18:05:21 973787
Посоветуйте функциональный язык программирования для операционной системы с экзоядром. Низкоуровневые части буду писать на forth.
Ответы: >>973794
Аноним 14/04/17 Птн 18:25:19 973794
>>973787
Кобол.
Ответы: >>973810
Аноним 14/04/17 Птн 19:11:17 973810
>>973794
Так у него другая парадигма же.
Аноним 16/04/17 Вск 20:13:44 974628
>>973590
чистоты и ленивости
Аноним 18/04/17 Втр 05:33:29 975406
Почему у Хаскелла такой сложный синтаксис? Он конечно еще легче, чем у Rust'а, но все-же.
Ответы: >>975409 >>975990 >>976074
Аноним 18/04/17 Втр 06:11:16 975409
14830323909160.png (324Кб, 1274x1834)
14830323909392.png (511Кб, 1288x1886)
>>975406
Не сложный, а минималистичный.
Кресты местами намного блевотнее выглядят.
Ответы: >>975413
Аноним 18/04/17 Втр 06:21:18 975413
>>975409
А нет чего-то такого эдак однородного? Вот в лиспе мало всяких странных символов и все однородное, а что-то подобное но отвечающее нормам 21 века (монадки, функторы, зависимые типы) нельзя сделать?
Ответы: >>975722
Аноним 18/04/17 Втр 15:52:23 975722
>>975413
scala
Ответы: >>975738 >>980578
Аноним 18/04/17 Втр 16:07:30 975738
>>975722
Но это не чистый функциональный язык по сравнению с хаскелем офк
Аноним 18/04/17 Втр 19:19:28 975990
>>975406
для начала важно разобраться с инфиксными операторами и паттерн-матчингом
остальное дело привычки
и да, пробел – оператор аппликации

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

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

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

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

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

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

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

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

Я не особо в восторге от сих хипстерских редакторов и кроме как для Хаскеля Atom не использую; Atom мне нравится интеграцией с ghc-mod, показывает типы. Не нравится странным REPL. Файл в него загружать/перезагружать нужно явно, дополнение там идиотское.
Ответы: >>979289
Аноним 24/04/17 Пнд 17:29:10 979289
>>979205
>>978836
Аноним 24/04/17 Пнд 17: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
Ответы: >>980227 >>980237
Аноним 24/04/17 Пнд 17:57:16 979301
>>978746
Так и до деанона недалеко.
Смотри тематические сообщества.
Еще есть годная "конфа", там можно задать вопросы и найти иногда работу.
Одно время записывались радио выпуски о хаскелле, разговоры на всякие темы, интервью, обзор новостей и прочее, но сейчас перестали.
Ответы: >>979700
Аноним 24/04/17 Пнд 20:57:51 979445
Подкиньте плиз задач для ньюфагов
Ответы: >>979702
Аноним 25/04/17 Втр 09:08:53 979700
>>979301
>но сейчас перестали
ты про "бананы и линзы"? да вроде ж опять начали
Аноним 25/04/17 Втр 09:10:29 979702
>>979445
на хаскельвики есть 99 задач
Ответы: >>979732
Аноним 25/04/17 Втр 09:49:23 979732
>>979702
Благодарю
Аноним 25/04/17 Втр 18:15:39 980087
ПОЧАЛОСЬ
https://jobs.dou.ua/companies/livatek/vacancies/40483/
Ответы: >>980114 >>980221
Аноним 25/04/17 Втр 18:39:28 980103
Почему haskell часто советуют новичкам?
Ответы: >>980105 >>980124
Аноним 25/04/17 Втр 18:48:00 980105
>>980103
Погугли аниме Boku No Pico и игру Battletoads, поймешь.
Ответы: >>980119
Аноним 25/04/17 Втр 19:08:19 980114
>>980087
Чтобы индуцировать у человека аутизм/шизофрению, а потом при помощи NLP сделать из него послушного вьябывальщика, полного энтузиазма, который будет пахать не просто фултайм, но ещё и после работы, перед работой, по дороге на работу, и на выходных. Сниматься в рекламе своих технологий и своей компании с искренней улыбкой полной счастья. Потому что люди без серьёзных психических отклонений и незагипнотизированные на успех в 21-то веке работать, вообще, мягко говоря, не любят, и в такую ноулайферскую парашу как программирование их затянуть нереально, хотя в быту они вполне могут писать скрипты, более сложные алгоритмически, чем все ваши ёбаные интерпрайзы.
Ответы: >>980124 >>980217 >>980583
Аноним 25/04/17 Втр 19:15:10 980119
145987367214549[...].jpg (33Кб, 512x512)
>>980105
I get it
Аноним 25/04/17 Втр 19:19:31 980124
>>980114
>>980103
Аноним 25/04/17 Втр 21:06:29 980217
>>980114
А что это там бумкнуло?
Аноним 25/04/17 Втр 21:08:43 980221
>>980087
> 30+ years of working experience as a Haskell developer
Аноним 25/04/17 Втр 21: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

пофиксил за тебя
Ответы: >>980228 >>980247
Аноним 25/04/17 Втр 21: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
Ответы: >>980247
Аноним 25/04/17 Втр 21:29:11 980237
>>979294
Haskell:
r ^? responseBody . key "collection" . nth 0 . (key "track" <> key "playlist") . key "id" . _Integer

Ответы: >>980247 >>980413
Аноним 25/04/17 Втр 21:44:33 980247
>>980227
>>980228
>>980237
Нет, это всё рабочий код. В хаскеле монойд так не получится юзнуть, линзы так не работают, я много чё пробовал, даже тред создавал, максимум в биндинг вынести со строкой на вход типа f "track" <|> f "playlist", причём там тип надо будет указать. В жс мне не нужны эти проверки которые ты дописал, мне нужно исключение, если вдруг в пейлоаде чего-то не оказалось, потому что это исключительная ситуация, ожидаемое поведение - что там всегда будут эти поля.
Ответы: >>980494
Аноним 26/04/17 Срд 09:41:41 980413
>>980237
И как это распарсить в мозгу?
Аноним 26/04/17 Срд 10:37:43 980442
>>977680
Не совсем так. Функциональщики - это в первую очередь фанатики, социоблядками-хипстерами они являются не так часто, большинство вообще не ходит на конференции. Какой-то профит в плане типобезопасности у них действительно есть и с десятилетиями нарастает, просто в практическом отношении он гораздо менее значимый, чем им кажется, а главное, увеличеная сложность программ зачастую с перевесом нивелирует эти профиты, когда дело доходит до реальной майнтабельности. Динамические петушки вроде лисперов - это такие же фанатики, только с другими ценностями, с реальностью их ценности пересекаются не лучше.
Аноним 26/04/17 Срд 11: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
Ответы: >>980498 >>981012
Аноним 26/04/17 Срд 11:51:15 980498
>>980494
Достойны ответ js-блядку.
Аноним 26/04/17 Срд 14:10:05 980575
>>973558
>скала
блеванул, спасибо, что напомнил
Ответы: >>980619
Аноним 26/04/17 Срд 14:10:46 980578
>>975722
блеванул еще раз
Ответы: >>980619
Аноним 26/04/17 Срд 14:14:05 980583
>>980114
весело тут у вас
Аноним 26/04/17 Срд 15:44:44 980619
>>980578
>>980575
А чем тебе скала не нравится? Это лучшее их двух миров фп и ооп, где ты сам выбираешь в каком стиле писать.
Ответы: >>980805
Аноним 26/04/17 Срд 16:57:07 980661
Ребят, а как можно запустить в терминале программу на хаскелле, чтобы она как скрипт работала? ну то есть выдала output и всё, прекратила работать. чтоб как на питуне лол
Ответы: >>980668 >>980696
Аноним 26/04/17 Срд 17:18:02 980668
>>980661
Никак.
Ответы: >>980678 >>980696
Аноним 26/04/17 Срд 17:27:34 980678
>>980668
охуеть
Ответы: >>980696
Аноним 26/04/17 Срд 17:41:04 980696
>>980661
>>980668
>>980678
http://stackoverflow.com/questions/8676331/how-to-run-a-haskell-file-in-interpreted-mode
Ответы: >>980699
Аноним 26/04/17 Срд 17:44:50 980699
>>980696
Нахуй иди.
Аноним 26/04/17 Срд 20:12:46 980805
>>980619
нет чистоты? временем компиляции? скоростью работы? отсталостью средств разработки? синтаксисом наконец?
с хаскелем хоть понятно что это борщехлебство, а скала с претензией.
И блядь синтаксис уродский еще.
Ответы: >>980813
Аноним 26/04/17 Срд 20:30:48 980813
>>980805
> а скала с претензией.
Это не скала с претензией, а ее в проде используют, а в остальном

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

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

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

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

и так далее

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

Ответы: >>981065
Аноним 27/04/17 Чтв 13: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 быстро забываются.
> до тех пор пока ты делаешь какую-нибудь примитивную тупую хуйню.
Любая сложная хуйня раскладывается на примитивную тупую хуйню.
Ответы: >>982508
Аноним 28/04/17 Птн 08: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
Ответы: >>981459 >>981467
Аноним 28/04/17 Птн 10:20:23 981459
>>981434
Если вместо сравнений (==), (/=) везде использовать паттерн-матчинг, то Eq не понадобится. Код при этом может стать более сложным и громоздким.
Ответы: >>981464 >>981467
Аноним 28/04/17 Птн 10:34:31 981464
>>981459
Понял, спасибо, видимо задание было на паттерн матчинг
Ответы: >>982006
Аноним 28/04/17 Птн 10: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
>Код при этом может стать более сложным и громоздким
ебанись
Ответы: >>981477 >>981478
Аноним 28/04/17 Птн 11:04:00 981477
>>981467
Повезло. Если б там (==) по делу были, оно бы стало только хуже.
Аноним 28/04/17 Птн 11:04:14 981478
>>981467
Спасибо
Аноним 28/04/17 Птн 14:30:43 981566
Хочется писать на чем-то функциональном и получать за это деньги, что стоит ближе к haskell, как к эталону ? фп, scala или erlang/elixir?

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


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

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

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

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



Ответы: >>981980
Аноним 29/04/17 Суб 13:04:28 981980
>>981966
Судя по отзывах, у Москвина в целом курсу по ФП и Хачкеле - лучше не бывет. Может упорюсь когда-нибудь.
Ответы: >>981988
Аноним 29/04/17 Суб 13:15:20 981987
спрашиваю здесь, так как ФП треда нет
Сравните плз. по хардкору F# и Scala, те, кто разбирается. Что более труЪ ФП? Делаю эпохальный для себя выбор: .NET vs JVM, но в функциональном духе. Короче, что брать?
Ответы: >>981992 >>997846
Аноним 29/04/17 Суб 13: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 Суб 13:29:28 981992
>>981987
тебе что больше нравится C# или Java? писать-то все равно на них будешь.
Ответы: >>981994
Аноним 29/04/17 Суб 13:32:39 981994
>>981992
Ты что слепой? Я ж написал - выбираю между F# и Scala. Императивщина не рассматривается.
Ответы: >>981997 >>982008 >>982024
Аноним 29/04/17 Суб 13:35:49 981997
>>981994
Он про то, что вакансий на чистых scala/F# нет, везде это идут, как доп языки. А по твоему вопросу ближе к haskell F# стоит, так как корни у языков одни - ML
Ответы: >>982003
Аноним 29/04/17 Суб 13:41:54 982003
>>981997
Да я не спрашивал про вакансии, я спрашивал про языки. Вы с кем там разговариваете, вообще?
Аноним 29/04/17 Суб 13:44:45 982006
>>981464
Кек
Аноним 29/04/17 Суб 13:45:36 982008
14925955636770.jpg (253Кб, 725x1866)
>>981994
>Scala
>Императивщина не рассматривается
>Scala
Ответы: >>982012
Аноним 29/04/17 Суб 13:50:09 982012
>>982008
То есть, ты намекаешь на F#?
Аноним 29/04/17 Суб 14:12:29 982024
>>981994
На работе ты не будешь писать только на F#/Scala, ты будешь писать на их смеси с C#/Java.
Если тебе не для работы, то Haskell.
Ответы: >>982035
Аноним 29/04/17 Суб 14:23:31 982035
>>982024
Ну ёпрст Ты говоришь о том, что и так всем очевидно. Чтобы избежать таких ответов я специально задал конкретный вопрос. По языкам-то что? Кто-нибудь знает?
Ответы: >>982037
Аноним 29/04/17 Суб 14:25:25 982037
>>982035
да похуйу всем
скала это солянка, но у нее есть завтипы
F# похож на окамл, более MLный, так что потом сможешь посмотреть на всякие SML, OCaml
Ответы: >>982043 >>982047
Аноним 29/04/17 Суб 14:31:24 982043
>>982037
>завтипы
Это даже в C++ есть.
Аноним 29/04/17 Суб 14:33:02 982047
>>982037
>F# похож на окамл, более MLный, так что потом сможешь посмотреть на всякие SML, OCaml
Есть смысл после F# смотреть на OCaml?
Ответы: >>982089
Аноним 29/04/17 Суб 15:59:58 982089
>>982047
Если тебя ещё не заебало это всё - тогда конечно. Там гораздо больше фич, функторы, параметризуемые модули, структурный сабстайпинг и тд.
Аноним 29/04/17 Суб 18:40:57 982163
image.png (78Кб, 1386x565)
Ответы: >>982175
Аноним 29/04/17 Суб 18:48:11 982168
Может кто-нибудь поделиться свежей версией Haskell Programming from first principles? В интернетах нашел только версию на начало 2016 года.
Ответы: >>982206
Аноним 29/04/17 Суб 19:05:56 982175
Sex1E8m.jpg (464Кб, 1131x1600)
>>982163

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

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

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

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

> map filter
> свертки
Ответы: >>982548
Аноним 30/04/17 Вск 16: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]: []), []);
Ответы: >>983396
Аноним 02/05/17 Втр 03:18:59 983396
>>982548
Справедливо.
Аноним 02/05/17 Втр 19:22:52 983816
>>969768 (OP)
Почему так

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

а не так?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

Поставь stack из репы, это всё, что тебе нужно. И читай как его использовать.
Аноним 15/05/17 Пнд 10:00:39 991004
Скажите, какой самый лучший/правильный подход к параллелизму в ФП?
Ответы: >>991051
Аноним 15/05/17 Пнд 11:14:50 991051
>>991004
Чистота языка
Ответы: >>993711
Аноним 18/05/17 Чтв 07:53:20 992616
Сап, хаскач. Как начать понимать что-либо в лямда-нотациях? Можно ли сигнатуру представлять в \-виде?
Ответы: >>992646
Аноним 18/05/17 Чтв 09:14:31 992646
>>992616
Так оно всё в таком виде. Просто сахарок повсюду.
Ответы: >>992730
Аноним 18/05/17 Чтв 09:39:02 992661
Где почитать всякую философскую муть по функциональному программированию, его развитию, перспективах и таком духе?
Аноним 18/05/17 Чтв 11: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
Ответы: >>992754 >>992766
Аноним 18/05/17 Чтв 12:12:43 992754
>>992730
findEq = \(x:xs) -> \y -> if x/=y then x:findEq xs y else x:xs

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

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

выводит:
[2]

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

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

data Person = Person { fisrtName :: String }

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

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

а что если так

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

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

data Person = Person PersonName PersonAge
type PersonAge = Int
type PersonName = String
Аноним 26/05/17 Птн 08: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"
Ответы: >>996500
Аноним 26/05/17 Птн 09: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 Суб 12:55:02 997037
>>969768 (OP)
Работаю с хаскелем, если есть вопросым задавайте.
Ответы: >>997051 >>997054 >>997424
Аноним 27/05/17 Суб 13:29:37 997051
>>997037
Как и за сколько времени освоился с всякими функторами, монадами и прочего из теории категорий?
Ответы: >>997175
Аноним 27/05/17 Суб 13:37:11 997053
какое отношение у хаскелистов к idris?
думаю вкатиться со скалы в хаскель или идрис
я правильно понимаю что идрис = хаскель + зав типы?
можно ли сразу начинать с идриса?
Аноним 27/05/17 Суб 13:37:30 997054
>>997037
насколько щедро плотют?
Ответы: >>997175
Аноним 27/05/17 Суб 18:26:57 997175
>>997051
В общих чертах ознакомился с языком, посмотрел пару примеров на гитхабе, сделал кой чего сам и все. Работаю и продолжаю изучать.
Взяли как раз из-за того что мало спецов на рынке.
>>997054
На житье-бытье хватает.
Ответы: >>997179 >>997355
Аноним 27/05/17 Суб 18:32:59 997179
>>997175
какой город?
Ответы: >>997205
Аноним 27/05/17 Суб 19:48:06 997205
>>997179
NY
Ответы: >>997353
Аноним 28/05/17 Вск 07:53:11 997353
>>997205
замечал кстати что на хаскеле внезапно много перекатных вакансий в сша
Аноним 28/05/17 Вск 07:54:10 997355
>>997175
а до этого какой опыт? сеньор помидор 10 лет опыта опердней на эрланге?
Ответы: >>997376
Аноним 28/05/17 Вск 09:03:00 997376
>>997355
До этого админом работал и software developer С++
Аноним 28/05/17 Вск 11:00:18 997424
>>997037
безумно рад за тебя анон
Аноним 29/05/17 Пнд 07:20:12 997834
>>969768 (OP)
неужели есть реальные вакансии на хаскел дев в 2017? Может еще и аутсорс?
Аноним 29/05/17 Пнд 07:47:00 997846
>>981987
Нормальное ФП только в Хаскелле (из живых языков). Но если выбирать из F# и Скалы, я бы выбрал Скалу. F# сильно косит под ФП, поскольку спиздил синтаксис из Окамла, но по сути проект проприетарный с полудохлым комьюнити. Я не знаю на F# каких-нибудь продуктов уровня Спарка или Кафки, я вообще не знаю, нахуй F# нужен. Ну разве что какую-нибудь хуитку писать, убедив начальника, что C# - это не тру, а F# - тру, хотя разница между ними весьма небольшая (не такая, как между Скалой и Джавой, поэтому не представляю какие аргументы ты сможешь привести).

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

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

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

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

jet.com алсо гугли
Ответы: >>1003400
Аноним 08/06/17 Чтв 22:18:34 1003392
http://fsharp.org/testimonials/ забыл
Аноним 08/06/17 Чтв 22:50:06 1003400
>>1003388
Ты пару слов пропустил:
>того же уровня
Аноним 08/06/17 Чтв 23:05:38 1003403
поработай для начала с кафкой, потом расскажешь какого она уровня
Аноним 11/06/17 Вск 04:23:25 1004317
>>994521
x и acc местами поменяй
Аноним 11/06/17 Вск 13: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?
Ответы: >>1008185
Аноним 16/06/17 Птн 16: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 функия не может иметь в результате саму себя, наверное. Но об этом тут никакой речи нет. И приходиться из кортежа вытаскивать первое значение, а возврат самой себя нафиг не нужен. Я чего-то не понимаю точно.
Ответы: >>1008188
Аноним 17/06/17 Суб 12:18:59 1007487
Блять, хуле же так сложно то с этой вашей теорией категорий. Пытаюсь высрать реализацию Foldable для двоичного дерева. Мозги скрипят, пиздец.
Ответы: >>1007543 >>1007547
Аноним 17/06/17 Суб 14:46:45 1007543
>>1007487
Ты почти постиг дзен. Теперь осталось ответить на один простой вопрос - зачем? Зачем все это? Как это приближает тебя к решению конкретной задачи?
Ответы: >>1007588
Аноним 17/06/17 Суб 14:55:06 1007547
>>1007487
>реализацию Foldable для двоичного дерева
А как ты для этого используешь теорию категорий?
Ответы: >>1007588
Аноним 17/06/17 Суб 16:28:07 1007588
>>1007543
Упражнение в книжке. Приближает к возможности практического применения инструмента.
>>1007547
Никак. Просто пришел на двачи поныть о том что сложна.
Аноним 17/06/17 Суб 18:14:55 1007668
Что скажете за purescript? Кто пользовался для реальных проектов?
Ответы: >>1008143
Аноним 18/06/17 Вск 15:37:07 1007997
Обязательно ли знать наизусть все моноиды, функторы, и прочее для того чтобы писать продакшн код?
Аноним 18/06/17 Вск 20:09:08 1008143
2017-06-18-2308[...].png (37Кб, 599x298)
>>1007668
Ну котятки, что, совсем никто?
Ответы: >>1041503
Аноним 18/06/17 Вск 23: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. Я сначала написал с ним, но потом подумал, что лучше не добавлять лишних модулей просто так.
Аноним 18/06/17 Вск 23: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] -> на конкретных примерах.
Ответы: >>1008190 >>1008297
Аноним 18/06/17 Вск 23:52:26 1008190
>>1008188

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

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

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

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

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

derivative :: Num a => St a a

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

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

В твоих тестах следующее
ap (integral . id) [0,1,2]
Как оно работает? Ведь в ap эта композиция принимает элементы листа? То есть сначала берется 0 и к нему применяется id, который должен брать/быть что-то типа St, то есть функцию.
Аноним 20/06/17 Втр 14:36:32 1008837
>>1008830
Я так начинаю понимать, что id сам является функцией типа St, которая работает как обычный id для элементов листа.
А если применить id к чему-то с типом St, то что будет. Или оно так не должно применяться..
Ответы: >>1008931
Аноним 20/06/17 Втр 18: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 Втр 18: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

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

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

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

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

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

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

>>1008943
Так же получилось, как в закомментированной строчке.
Аноним 22/06/17 Чтв 12:14:49 1009970
Как написать quicksort на хаскеле таким же быстрым, как на C или C++?
Ответы: >>1009987 >>1010201
Аноним 22/06/17 Чтв 12:57:26 1009987
>>1009970
Главное препятствие - runtime system, реализующая семантику аппликативных вычислений на тьюринг-архитектуре.
Самый разумный способ - взять C/C++
вместо хаскеля
.
Ответы: >>1010005
Аноним 22/06/17 Чтв 13:32:44 1010005
>>1009987
Изменяемые данные (без создания копии) в хаскеле никак невозможны?
мимобайтоеб
Ответы: >>1010010
Аноним 22/06/17 Чтв 13:40:08 1010010
>>1010005
На анбоксед векторах разве что
Аноним 22/06/17 Чтв 19: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 Птн 06: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, оно же по типу не подходит?
Ответы: >>1010349 >>1010351
Аноним 23/06/17 Птн 06:55:37 1010349
>>1010348
a и f b это тот самый тип
Ответы: >>1010352
Аноним 23/06/17 Птн 06:56:41 1010351
>>1010348
Стоило только спросить на двачах, как сразу снизошло озарение, лол. Если a :: f b
Аноним 23/06/17 Птн 06:57:11 1010352
>>1010349
Один и тот же в смысле
Аноним 23/06/17 Птн 06:58:19 1010353
А на пикрелейтед что скажите? purescript
Попробуйте вызвать traverse с id.
Ответы: >>1010668
Аноним 23/06/17 Птн 20:05:52 1010668
>>1010353

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

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

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

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

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

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

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

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

(\x -> if x == 0 then 1 else СУКА)
А фикс просто принимает как аргумент ещё и фунуцию.
Ответы: >>1042615
Аноним 10/08/17 Чтв 21: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))

Просто поэтапно переноси.
Ответы: >>1042615
Аноним 11/08/17 Птн 08:41:32 1042455
>>1042219
Так обычно в учебнике где-то в начале и объясняют.
Ответы: >>1042615
Аноним 11/08/17 Птн 13:40:50 1042615
>>1042252
>>1042260
>>1042455
Все так, но я пытался самостоятельно проделать все шаги бета-редукции, и запутался в том, что куда подстанавливать. Попытался применить индексы де Брауна, стало только хуже. А суть-то я понял, Y работает по тому же принципу, что и Ω, который совсем простой.
Аноним 12/08/17 Суб 13:50:21 1043202
https://people.mpi-sws.org/~dreyer/tor/papers/wadler.pdf
Объясните мне тупому, в чем там вся соль?
Аноним 13/08/17 Вск 15: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).


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

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

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

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

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

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

Теперь хуяк:

d = f const
e = f id

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

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

> но какой смысл всё это может иметь в ФП
Определи "ФП".
Ответы: >>1054116 >>1054120
Аноним 30/08/17 Срд 13:05:45 1054116
>>1054113
Фалоклитороммитатор Педерастичный.
Аноним 30/08/17 Срд 13:09:54 1054120
>>1054113
>Определи "ФП".
Зачем заново определять ФП? Возьмём обыкновенное определение, как аппликативную модель вычислений, данную в виде λ-исчисления или комбинаторной логики.
Аноним 30/08/17 Срд 13:13:19 1054125
>>1054120
жс дристня подпадает под это определение?
Ответы: >>1054127
Аноним 30/08/17 Срд 13:14:37 1054127
>>1054125
Да не знаю я ЖС, писал ведь уже.
Ответы: >>1054130
Аноним 30/08/17 Срд 13:16:27 1054130
>>1054127
А че знаешь?
Ответы: >>1054131 >>1054135
Аноним 30/08/17 Срд 13:17:44 1054131
>>1054130
Я не знаю JavaScript. Из ФП знаю только хаскель.
Аноним 30/08/17 Срд 13:18:44 1054135
>>1054130
По-моему ты невнимательно читаешь тред.
Аноним 30/08/17 Срд 13:25:36 1054145
>>1054120
В терминах \-исчисления замыкание возникает где-то между аппликацией и непосредственным проведением бета-редукции:
app (\x . \y -> x y) id
closure (\y -> x y) [x := id]
beta (\y -> id y)
Ответы: >>1054167
Аноним 30/08/17 Срд 13:29:47 1054152
>>1054108
Как это свободная переменная связана с определённым значением? Так она свободная или нет?
>Два раза вычислив f (в определениях d и e), создались две одинаковые лямбды но с разными контекстами.
Да ничего там не вычисляется, мы на основе одной абстракции (λ x y. xy) определили две (λ y. const y) и (λ y. id y), у каждой из которых имеется по одной свободной переменной.
Замыкание здесь где? Где здесь преодоление захвата переменной (т.е фунарг)?
Ответы: >>1054164 >>1054176
Аноним 30/08/17 Срд 13:33:55 1054158
Нахуй ваши замыкания. Лучше объясните монад трансформеры на примере.
Аноним 30/08/17 Срд 13: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.
Ответы: >>1054184
Аноним 30/08/17 Срд 13:55:34 1054167
>>1054145
Что значит "между"? Аппликация - это не этап вычислений, это любой терм вида (T₁ T₂) где T₁, T₂ ∈ Λ. β-редукция - примерно то что у тебя обозначено как closure, а то, что ты называешь beta - аппликация (тоже терм).
Ответы: >>1054170 >>1054178
Аноним 30/08/17 Срд 13:57:49 1054170
>>1054167
>beta - аппликация (тоже терм).
Тьфу, то есть абстракция
Аноним 30/08/17 Срд 14:01:03 1054172
Забавно что хаскелепидоры готовы до посинения обсуждать теоркат, но когда надо реально что-то сделать, они съебывают в туман. Моё недавнее приключение в стране xmonad доказывает это чуть более чем полностью. Окружению уже 10 лет, а оно до сих пор кривое, глючное и с десткими болезнями.
Ответы: >>1054180
Аноним 30/08/17 Срд 14:03:42 1054176
>>1054152
>по одной свободной переменной
Вернее по одной связанной переменной
только сейчас заметил, что не то написал,
что имел в виду
Аноним 30/08/17 Срд 14:08:01 1054178
>>1054167
beta-редукция примерно так записывается, когда выражение записано в общем виде (T [x : = something]). У меня чуть другой смысл - у лямбда выражения есть контекст, в котором определены некоторые переменные. Т.е. грубо говоря, абстракция создает контекст с не связанным x. После аппликации, в самом начале бета-редукции мы в этом контексте связали x со значением. Вот в этот момент вся эта конструкция и называется замыканием. А дальше мы можем сразу провести редукцию если переменная иммутабельна, или таскать эту конструкцию по остальной части программы в любом случае.
Ответы: >>1054185
Аноним 30/08/17 Срд 14:11:19 1054180
>>1054172
В xmonad у меня все нормально работает.
Аноним 30/08/17 Срд 14:21:06 1054184
>>1054164
Что такое "чистое лямбда выражение"?
>Свободная она в чистом лямбда выражении (\y-> x y), абстракция f x создает некоторый контекст в котором x свяжется после аппликации.
В хаскеле все термы замкнуты (т.к. нет множества свободных переменных, как это полагается в λ-исчислении).
>не создается абстракция, а либо бета-редуцируется до терма (\y -> id y)...
Так терм (λ y. id y) и есть абстракция.
>остается closure (\y -> x y) [x := id]
Это я не понял. Что это значит в λ-исчислении?
Ответы: >>1054248
Аноним 30/08/17 Срд 14:30:56 1054185
>>1054178
>у лямбда выражения есть контекст
Какой такой контекст?
>определены некоторые переменные
Но в хаскеле переменные не определяются. Определяются только (замкнутые) термы.
>если переменная иммутабельна
Как это "иммутабельна"? Переменная она переменная и есть (параметризует терм-абстракцию и всё).
Для начала бы понять, возможен ли в ФП захват переменной, если переменная - это не ячейка памяти, ничего не хранит, на неё ничто не может ссылаться, и у неё не времени существования (как в процедурных языках).
Ответы: >>1054202 >>1054248
Аноним 30/08/17 Срд 14:56:57 1054202
>>1054185
>Но в хаскеле переменные не определяются.
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-240003.2
Ответы: >>1054220
Аноним 30/08/17 Срд 15:14:10 1054220
>>1054202
Ну при чём здесь это? Спецификация устанавливает конкретный синтаксис языка. Переменные в синтаксисе хаскеля, конечно, имеются, именно для того, чтобы определять абстракции (т.е. они связанные). Но в программе самостоятельную переменную объявить нельзя (да это и не имеет смысла).
Аноним 30/08/17 Срд 15:49:41 1054248
>>1054184
>Что такое "чистое лямбда выражение"?
"Очищенное" от обстракции f x

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

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

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

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

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

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

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

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

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

int hui() {
return x;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>И самое плохое, что понимание ФП замыкания никак не поможет ИП программисту лучше понять ИП-замыкания.
Замыкание - это описание вычислений в теле которого есть свободные переменные. Что тут еще надо понимать-то? То, что это иногда используется как костыль в ИП? Конечно тебе ФП не расскажет об этом.
Ответы: >>1057362
Аноним 05/09/17 Втр 08:03:46 1057362
>>1057335
>В ней нет термов, в ней есть комбинаторы, которые определяются как одноместные функции.
CL-термы, они же комбинаторы. В λ-исчислении им соответствуют замкнутые термы. CL-термы определяются либо своими комбинаторными характеристиками, либо выражаются в виде аппликаций других CL-термов. Причём тут одноместные функции?
>Процедуры ИП в общем случае не обладают денотационной семантикой (например, x+=1). Выражения в ФП - все поголовно.
Ну так я и говорю, денотационная семантика факультативна. Если нужно и удалось указать отображение корректных выражений языка в выбранный математический домен, значит задана некоторая денотационная семантика. Но это не обязательно. Операционная же семантика языка программирования имеется всегда.
>Операционная семантика Хаскеля понадобится только на этапе оптимизации программ. При программировании на Хаскеле в остальном большинстве случаев достаточно его денотационной семантики.
Программировать не опираясь на операционную семантику - всё равно, что программировать вслепую. Не думаю, что в общем случае достаточно денотационной семантики, тем более, что в обще случае она не гарантирована. Вот, к примеру, какой смысл имеют ФП-замыкания в какой-нибудь денотационной семантике?
>Почти совсем как в ИП - именованное место на ленте.
Но терм - не лента памяти. Вообще ничего общего.
>Замыкание - это описание вычислений в теле которого есть свободные переменные. Что тут еще надо понимать-то?
Проблема в том, что использование замыканий в ФП и ИП разительно отличается.
Ответы: >>1057365
Аноним 05/09/17 Втр 09: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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>Так и понятием не получится пользоваться осознанно.
Если ты не можешь осознать, то конечно.
Ответы: >>1057473
Аноним 05/09/17 Втр 13: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, какие-то претензии есть?
>Денотационной семантики хаскеля достаточно для понимания смысла этих математических выражений
Да не математических выражений а выражений языка.
>Если ты не можешь осознать, то конечно.
Ну я же выше писал в чём трудность.
Анон, мне кажется, с твоей стороны начинается какое-то тралирование.
Ответы: >>1057478
Аноним 05/09/17 Втр 13:29:43 1057478
>>1057473
>Зачем тебе эти ссылки?
Почитать.

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

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

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

Топ тредов
Избранное
Подписывайся на официальный канал Двача в Телеграме и узнавай обо всех новостях и мемах первым! https://tlg.wtf/dvachannel[X]