Без названия
lex_kravetski — 07.04.2025
Не спешите пугаться текста через абзац — его вполне нормально не
понять, поскольку история не про конкретную тему, а про донесение
обучающей информации.Меня давеча в комментах спрашивали, какие такие тексты математиков, которые только всё запутывают, я имел в виду. Вот примерно такие:
«Аппликативный функтор — это функтор, для которого доступны две дополнительные операции: pure и seq. Оператор pure совпадает с тем, что используется в монадах, поскольку монада фактически наследует от аппликативного функтора. Операция seq во многом похожа на map: она позволяет преобразовывать содержимое типа данных с помощью функции. Однако в случае с seq сама функция также содержится внутри типа данных: её сигнатура имеет вид f (α → β) → (Unit → f α) → f β. Наличие функции внутри типа f позволяет экземпляру аппликативного функтора контролировать способ её применения, тогда как Functor.map безусловно применяет функцию. Тип второго аргумента начинается с Unit →, чтобы определение seq могло сокращать вычисления в случаях, когда функция не будет применена (например, для обработки ошибок или ленивых вычислений).»
Если вы думаете, что тут всё дело в переводе, то нет — в переводе даже несколько лучше, чем в оригинале.
Если вы думаете, что вам в таком объяснении понятно примерно нифига, поскольку это не ваша тема, а для понимания нужно пятнадцать лет суровой математической подготовки, то опять же нет: саму идею мог бы понять даже дошкольник.
Тут дело в том, что автору-математику очень нравятся слова «функтор», «аппликативный», «монада», а также гордиться своей докторской степенью или что там у него.
Давайте предположим, что вы про программирование знаете почти ничего, но всё равно хотели бы понять идею.
Есть у вас какая-то ёмкость — банка, коробка, конверт, шкаф, неважно что, — которую мы назовём f. В ёмкости, возможно, лежит инструкция, как из чего-то (например, из муки или пластилина), тип чего мы назовём α, сделать что-то другое (например, пирог или фигурку слоника), что мы назовём β. Так вот, функция или, если угодно, последовательность действий, которую мы назовём seq, описывает следующий процесс.
1. Извлекаем инструкцию из ёмкости типа f (например, из банки), если инструкция там правда есть.
2. Если инструкция там есть, берём другую ёмкость типа f с субстанцией типа α (например, мукой), извлекаем субстанцию из банки и делаем из неё что-то типа β (например, пирог).
3. Кладём результат (пирог) в третью ёмкость типа f (в банку).
4. Если инструкции в банке не было или что-то ещё пошло не так, то возвращаем какую-то пустую ёмкость типа f. Ну или какую-то с чем-то, что мы сделали ещё как-то. Например, банку с пирогом, который мы купили в магазине, отчаявшись приготовить сами.
В описании второй части было (Unit → f α), поскольку нам не надо, чтобы банка с мукой взялась сама сразу — только если мы правда решим её взять. Например, если в первой банке инструкции не было, то нам не надо тратить время на поиски банки с мукой — можно сразу идти в магазин или отдавать пустую банку. Поэтому тут у нас функция типа «из ничего — в банку с мукой» (или «из ничего — в коробку с пластилином»). Если мы назовём её, например, get, то банка с мукой возьмётся только после того, как мы напишем get ().
Возможно, блин, это несколько длиннее и не звучит так, что другому математику со степенью сразу понятно, какой автор прошаренный, но зато тут есть все шансы, что поймёт даже дошкольник. В первом же варианте есть нехилые шансы, что не поймёт даже этот другой математик со степенью.
|
|
</> |
Не меняется яркость экрана на ноутбуке - Гайд от компьютерного мастера
IQ (idiotic question): на какое время вы заводите свой будильник?
Как вы выбрали мужа?
насколько одна сигарета сокращает жизнь?
Завоевание Испании маврами
Тест нового Subaru Forester: каким должен быть настоящий автомобиль
А если Сергей Салтыков — отец Павла Первого?
Корни "Посейдона" и "Буревестника"

