Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lab 2 #11

Open
the-homeless-god opened this issue Feb 19, 2025 · 31 comments
Open

Lab 2 #11

the-homeless-god opened this issue Feb 19, 2025 · 31 comments
Assignees

Comments

@the-homeless-god
Copy link
Member

– What's immutability? Provide a few examples.
– Describe the monad. Provide a few examples.
– Provide a few examples for endless machines.
– What's difference between OOP and FP?
– Provide examples for tasks that can be solved only with FP.
– How do you understand carrying?
– Example of idempotency in real life
– What's daemon in *nix systems?

@the-homeless-god the-homeless-god self-assigned this Feb 19, 2025
@Rey1147
Copy link

Rey1147 commented Feb 19, 2025

  1. Иммутабельность – это концепция, которая подразумевает, что состояние объекта после его создания не будет изменено. Вместо модификации существующего объекта создаётся его копия, которая используется для дальнейшего преобразования.
    Банк может создать купюры с новым дизайном. Купюры со старым дизайном не перестанут существовать
  2. Монада это способ управления вычислениями в определённом контексте (например, обработка ошибок или асинхронных задач). Она помогает перекидывать данные через цепочку операций, сохраняя контекст
    Команда .then() это операция, которая получает результат предыдущего шага и передаёт его дальше, как монада
  3. Бесконечный цикл (while (true) {}). Машина Тьюринга имеет потенциально бесконечную ленту, на которой она читает и записывает символы. Если программа не содержит условия останова, машина будет работать бесконечно
  4. ФП основано на чистых функциях, которые не изменяют состояние, а просто принимают данные и возвращают новые. В отличие от ООП, где объекты хранят и изменяют своё состояние
  5. Каррирование функции. В ООП для такого пришлось бы создавать класс с методом
    Генерация бесконечного ряда Фибоначчи. В ООП пришлось бы хранить изменяемое состояние
  6. Каррирование - возможность произвольного задания контекста для функции. Это процесс превращения функции, которая принимает несколько аргументов, в серию функций, каждая из которых принимает по одному аргументу и возвращает новую функцию
  7. Первый раз включили лампочку — свет включился. Каждый последующий раз, пока лампочка уже включена, вы ничего не измените, свет не станет ярче, он остаётся включённым
  8. Демон в *nix-системах это фоновый процесс, который выполняется без взаимодействия с пользователем. Он запускается при старте системы или по запросу и выполняет задачи, такие как обработка сетевых запросов или управление сервисами

@kagam1i
Copy link

kagam1i commented Feb 19, 2025

Бялясова Елена 3/147

  1. Иммутабельность— это когда объект после создания нельзя поменять. Если нужно что-то изменить, создаётся новый объект, а старый остаётся таким, каким был.
    Примеры:
    Надпись на бумаге: мы не можем изменить то, что уже написано, только если возьмем новый листок и напишем заново.
    История в браузере: мы не можем изменить запись об уже посещенном сайте.
  2. Монада – способ обернуть данные, для более удобной работы ними, избегая ошибок.
    Примеры:
    Сайт, требующий регистрацию перед доступом к контенту
    Лекарства с инструкцией по применению
  3. Майнинговые компьютеры, хостинг сайта, система электроснабжения
  4. ООП - это стиль программирования, где всё строится вокруг объектов, а ФП– это стиль, где всё строится вокруг функций, которые не меняют данные, а обрабатывают их.
  5. Вычисление факториала числа, выборка четных чисел из списка
  6. Преобразование функции с любым количеством аргументов в функцию только с одним аргументом.
  7. Если мы запрели дверь на ключ, то еще один поворот ключа не сделает ее «более закрытой»
  8. Программа, которая работает в фоновом режиме и делает какую-то работу без участия пользователя. Она запускается автоматически при включении компьютера и работает постоянно, пока ее не остановят.

@Ygolechek
Copy link

  1. Иммутабельность — это, по сути, неизменяемость. Если состояние объекта = неизменяемое, то мы не можем изменить его после создания. Можно привести несколько примеров из реальной жизни. Например, ДНК. Она содержит генетический код организма и является неизменной. Она передаётся от родителей к потомству без изменений. Снежинки: каждая снежинка имеет уникальную и неизменяемую кристаллическую структуру.
  2. Монада — это набор функций, которые преобразуют значения в определённый тип, представляющий вычисления. Например, с помощью функции можно преобразовать тип данных int в string или добавить элемент в список.
    3.В качестве примера можно привести природу, ведь она сама может рассматриваться как бесконечная машина, поскольку постоянно меняется и развивается, создавая бесконечное разнообразие форм и процессов. За бесконечную машину я бы принял фракталы, которые самоподобны, и при увеличении мы увидим бесконечное множество деталей фракталов.
    Круговорот воды в природе — тоже элементарный пример бесконечной машины. Цикл является непрерывным и повторяется снова и снова.
  3. ООП-подход предполагает работу с объектами, а в ФП — с функциями. Объекты в ООП могут изменяться, как и их свойства, а в ФП данные не могут изменяться. В первом случае обязательно хранение данных, а во втором данные нигде не хранятся.
  4. Выписать все дробные числа от 0 до 1. Или просто выписать все числа, находящиеся между двумя соседними целыми числами. Если хранить эти значения где-либо, то места не хватит, так как их бесконечное количество. Если хранить только в какой-то конкретной переменной, то с переменной может что-то случиться (в компьютер ударит молния), и данные изменятся или пропадут в какой-то момент. В данной ситуации ФП будет возвращать только само значение функции и нигде его не сохранять, а значит, будет работать непрерывно, пусть и до бесконечности (что, как ни странно, подтверждает, что это вообще будет работать).
  5. Каррирование (currying) — это преобразование функции с множеством аргументов в набор вложенных функций с одним аргументом. Благодаря каррированию функцию можно вызывать последовательно, передавая данные по одному параметру. Функция не будет заполнена, пока не будут переданы все параметры.
  6. Идемпотентность — свойство функции, при многократном применении которой к одному и тому же аргументу результат не отличается от результата однократного применения. Например, если мы опустим выключатель света 1 раз, то свет выключится, если мы выполним это действие ещё раз, то результат останется прежним
  7. Демон в *nix-системах — это процесс, который работает в фоновом режиме и не требует взаимодействия с пользователем.

@MrLobzik
Copy link

MrLobzik commented Feb 19, 2025

Лобанов Дима 3/147

  1. Иммутабельность - это свойство объекта, не позволяющее каким-либо способом изменить его состояние. Например, константы в программировании. Методы класса DataFrame из библиотеки pandas для Python: они возвращают изменённый DataFrame, но это не тот же самый объект, который был изначально. Первичный объект не подвергается изменениям, а действия метода применяются к возвращаемому.
  2. Как я понял, монада - практически тоже самое, что и функторы, только в функциональном программировании. Исходя из этого основная функция монады - служить обёрткой для какой-либо функции (последовательности действий). При дальнейшем рассмотрении монады, заметно, что она по свойствам больше похожа на узел синтаксического дерева, который выполняет какую-то функцию и ссылается на другие узлы, являющиеся операндами функции. Примеры: функторы и лексические деревья
  3. Любые вариации вечного двигателя, Машина Тьюринга, бесконечный автомат Мили
  4. В ООП главной единицей программы являются объекты в то время, как в ФП - функции. ООП объединяет данные и поведение, ФП - разделяет. И самое главное - ссылочная прозрачность функций. Она обязательно для ФП. В ООП результат функции/метода может быть зависим от каких-либо глобальных состояний, в ФП - нет
  5. Таких не знаю, задачи можно решить разными подходами. Разница только в том, что где-то код будет короче, чище, более лёгкий для тестирования, менее запутанный (из-за отсутствия множества связей между объектами) или более предсказуемый
  6. Каррирование - техника, с помощью которой 1 функция с множеством аргументов преобразуется в последовательность множества функций с 1 аргументом
  7. Дверь с датчиком движения. Когда кто-либо к нему подходит дверь открывается
  8. Демон - это вид программ работающих в фоновом режиме, без прямого взаимодействия с пользователем. Обычно запускаются системой при старте. Например, программа ищущая сеть на телефоне (в сим-карте), GPS-трекер, мониторинг погоды

@notonafu
Copy link

  1. Иммутабельность – свойство какого-либо объекта не изменять состояния после его создания. Модификация иммутабельного объекта приводит к созданию нового объекта, не изменяя старого. Пример: строки в Python, коммиты в Git.
  2. Монада позволяет структурировать последовательность действий, когда каждое действие не только выдает результат, но и дополнительную информацию, или даже выполнение другого (конкретного) действия. Пример использования монады: логирование информации о выполнении каждого действия в консоль.
  3. Машина Тьюринга с бесконечной лентой, вечный двигатель, фоновые сервисы ОС Windows (условно).
  4. ООП – объекты и методы; возможность изменения данных после их создания. ФП – функции и переменные; невозможность изменения данных, цель – их обработка.
  5. Доказательство научных теорем, рекурсии.
  6. Каррирование – превращение функции с несколькими параметрами в последовательность функций с одним параметром.
  7. Кнопка вызова лифта.
  8. Фоновые процессы, помогающие ОС работать корректно и не требующие взаимодействия с пользователем.

@goutosama
Copy link

goutosama commented Feb 19, 2025

Чадов Сергей 3/147

  1. Иммутабельность - невозможность изменения входящих параметров функции. С помощью копирования входящих параметров, иммутабельность позволяет минимизировать баги и отделить функцию от остальной части кода (а также отдельно протестировать её). Примеры: форк репозитория на Github, каверы песен, ремейки/ремастеры различных игр (пока оригинальная часть всё ещё есть в магазинах можно сказать, что это иммутабельность)

  2. Монада - принцип управления данными в соответствии с контекстом или же принцип позволяющий скрыть от пользователя часть кода, производимого над данными. Примеры: автоматическое логирование с помощью монад, функции map(), bind() в языках программирования Python и JavaScript, специальные объекты данных в фронтенд-фреймворках, заставляющие сайт перерисовываться при их изменении (как ref() в Vue)

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

  4. Подходы объектно-ориентированного программирования и функционального различаются главенствованием одного из элементов - объектов или функций соответственно. Оба элемента подразумевают бесконечные возможности для описания и программирования каких-либо процессов, поэтому некоторые языки программирования сильно склоняются к одному из них: язык Java основан на ООП и продвигая идею, что "всё есть объект некоторого класса" и сохраняет объекты в своей памяти, а языки вроде Haskel подразумевают, что "всё есть функция" и не подразумевает какое-либо хранение состояний. Несмотря на то, как различается программирование и структура программ в этих разнополярных языках, я считаю, что разницы в выразительности программ в них нет и на них обоих можно запрограммировать что угодно.

  5. Хотя я и слабо представляю как это выглядит, но интернет говорит, что только в функциональных языках программирования можно доказывать различные теоремы. В остальных практических случаях, я считаю, что любую задачу можно решить и на ООП подходе и на функциональном.

  6. Каррирование - преобразование фунции с несколькими параметрами в набор вложенных функций с одним аргументом. Таким образом параметры в фунцию передаются последовательно.

  7. Идемпотентные операции: API сайта, выдающее один и тот же набор данных вне зависимости от количества вызовов (пока данные не обновятся), операции присваивания переменным значений, директивы для соединения кода в C (#include) добавляют код из файла только единожды.

  8. Daemon - даемон, он же демон, программа, выполняющаяся в фоне без интерфейса (headless) и чаще всего запускающаяся вместе с системой, они работают в фоне и никак не показываются пользователю. Так как в Unix-системах общение между программами происходит через текстовые потоки, даемоны запускаются в своём отдельном терминале и могут только получать и отправлять текстовые потоки.

@Clearheadedtyt
Copy link

Никитин Кирилл 3/147

  1. Неизменяемость - это свойство объектов, которые нельзя изменить после их создания. Любая модификация приводит к созданию нового объекта.
    Примеры:
  • Книга. Вы не можете стереть напечатанный текст, но можете написать новую книгу с изменениями;
  • Каменная статуя. Если вы хотите добавить деталь, нужно вырезать новую статую.
  1. Монада - это концепция из области функционального программирования, которая помогает управлять побочными эффектами и организовывать код. Можно представить монаду как контейнер, который оборачивает значение и предоставляет набор операций для работы с этим значением.
    Пример:
  • Почтовый ящик. Вы кладете письмо в ящик → почтальон забирает его → доставляет адресату. Каждое действие происходит "внутри" системы (ящика).
  1. Бесконечные машины (Endless Machines) - это процессы, которые работают без остановки.
    Примеры:
  • Сердце человека бьется непрерывно, пока человек жив;
  • Уличные фонари, которые автоматически включаются каждый вечер.
  1. ООП фокусируется на объектах и их взаимодействии, а ФП — на функциях и преобразовании данных.
    ООП — как моделирование мира через сущности, ФП — как решение задач через математические вычисления.

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

  3. Каррирование (currying) - это преобразование функции от многих аргументов в последовательность функций одного аргумента. Используется для частичного применения функций (например, создание шаблонных функций).

  4. Идемпотентность — свойство операции, при котором повторное выполнение не меняет результат.
    Пример:

  • Кнопка лифта. Если вы нажмете кнопку вызова лифта 10 раз, лифт приедет только один раз. Повторные нажатия не ускорят его и не изменят конечный результат.
  1. Демон в *nix-системах - это фоновый процесс-помощник.

@GitSwaggCat
Copy link

Новосёлов Николай 3/147

  1. Неизменяемость - свойство объекта не поддаваться изменениям из вне. Например, константы в физике.
  2. Монада - способ комбинации функций в разной последовательности при этом никак не изменяя контекст
  3. Вечный двигатель, Машина Тьюринга, Рекурсивные машины
  4. В ООП главной составляющей являются объекты-классы, а в ФП это функции. ООП объединяет данные в удобные структуры, а в ФП наоборот разделяет их для удобного и простого вычисления.
  5. Подсчёт каких либо чисел.
  6. Каррирование - Преобразование функции с множеством аргументов в функцию с лишь 1 аргументом
  7. Кнопка запуска приложения
    "Безумие — это точное повторение одного и того же действия раз за разом в надежде на изменение"
  8. Демон в системах nix - демон, который делает что-то в фоновом режиме без внешнего воздействия

@denisbochka
Copy link

Смолов Денис 3/147

  1. Иммутабельность - свойство объекта, которое означает, что его состояние нельзя изменить после создания. Любые изменения этого объекта создадут новый объект. Например: мы хотим изменить вкус чипсов twister с крабом, но уже существующие мы не можем изменить, поэтому будем делать уже новые с изменённым вкусом.
  2. Монада - способ задания порядка выполняемых операций. Например с помощью try можно связать две функции, чтобы вторая вызывалась только при успешном завершении первой
  3. Перечисление всего множества чисел; гравитация воздействует на нас везде и всегда, вне зависимости от того, где на планете мы находимся
  4. В ООП данные и связанное с ними поведение объединяются в объекты. В ФП данные и поведение чётко разделены, а вместо объектов используются функции, которые принимают данные и возвращают результат
  5. Обработка большого объёма данных, параллельные вычисления
  6. Каррирование - преобразование одной функции с некоторым количеством аргументов в последовательность вложенных функций, которые имеют по одному аргументу
  7. Кнопки Вкл/Выкл - сколько ни нажимай ничего другого они не сделают
  8. Демоны в *nix-системах - фоновые программы, запускаемые самой системой без прямого взаимодействия с пользователем

@RedMarshall37
Copy link

Киселев Артем 3/147

  1. Иммутабельность - это когда что-то нельзя изменить после создания.

К примеру, фактическое существование числа 7 нельзя изменить, что бы мы не делали.
Ну, или в программировании мы можем создать строку, к примеру, "Hello world!", и изменить ее мы не сможем. При попытке изменения мы просто создадим новую строку и ссылку на нее запишем в новую переменную

  1. Монада. Я мог что-то не так понять, но, это концепция, в которой мы работаем с черным ящиком, не открывая его. К примеру, у нас есть монада, в который лежит число 5. Мы об этом не знаем, но можем попросить ее добавить к тому, что лежит в ней число 3. При том, что мы можем не знать, что именно там лежит. К примеру, вместо числа там могла быть пустота, и он мог бы вернуть нам или ошибку, или воспринимать ее как 0. Или может быть он создал-бы массив с 3 новыми элементами и вернул-бы нам их. Суть в том, что для нас это не важно. Мы просто сказали "Добавь к тому, что внутри тебя 3" и получили результат

  2. Бесконечные машины — устройства, которые могут работать бесконечно.
    Примеры:

Бесконечный цикл в программе, который никогда не останавливается.
Наша реальность, в какой-то степени

  1. Разница между ООП и ФП:ООП (объектно-ориентированное программирование) — это когда всё строится вокруг объектов, которые имеют состояние и поведение, в то время как в ФП всё строится вокруг функций, которые не изменяют состояние, а только возвращают новые данные

  2. Задачи, которые могут быть решены только с помощью FP:

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

  1. Каррирование — это превращение функции с несколькими аргументами в последовательность функций, каждая из которых принимает один аргумент. Например:
    Функция, в которой мы складываем a + b превращается в функцию add(a);add(b)

  2. Идемпотентность — это когда повторение операции не меняет результат. Например, сколько бы раз ты ни нажал на кнопку лифта, он всё равно приедет только один раз.

8 daemon в nix — это программа, которая работает без участия пользователя. К примеру, системный процесс, который следит за обновлениями..

@EugeneWWolf
Copy link

EugeneWWolf commented Feb 19, 2025

3-147 Ермакова Ксения

Задание 1
Объект иммутабельный, когда нельзя изменять его состояние после его создания. Для "изменения" объекта нужно создать новый. Примеры: строки, кортежи в Питоне, различные типы данных в Хаскеле (в большинстве случаев). Из реальных объектов - паспорт.

Задание 2
Монада - это перенос функции с результатом выполнения в контекст другой функции с результатом выполнения. В качестве примера могу привести простой "калькулятор", у которого есть функции по типу square, cube, addOne (для простоты это функции, которые принимают один аргумент). И к этой штуке мне захотелось прикрутить логирование. Для этого можно создать тип numberWithLogs, который будет хранить в себе число и связанные с ним логи (чем больше операций будет происходить с числом, тем больше будет становиться лог). Теперь можно сделать так, чтобы функции мат. операций принимали на вход не просто number, а numberWithLogs (на выходе этих функций будет тоже соответственно numberWithLogs). Но это быстро становится неудобным, потому что при вложении операций друг в друга (например, square(square(5)) будет выводиться ошибка о том, что number не содержит в себе логов. К тому же каждая операция дублирует в себе код "соединения" новых логов с прошлыми, что при большом количестве кода станет катастрофой. Поэтому для было бы удобно предоставить такую штуку, которая будет перегонять number в "контекст" numberWithLogs для дальнейших операций с этим. Допустим, это будет функция wrapWithLogs. Тем самым при вызове square можно делать так: square(wrapWithLogs(5)). Затем, чтобы в теории не повторять логику соединения логов внутри каждой операции и в целом сделать код более простым и гибким в использовании, её можно вынести в отдельную функцию, которую можно назвать, например, runNumbersWithLogs. Она будет принимать на вход numberWithLogs, а также операцию над ним в виде функции, например, addOne, которая принимает на вход теперь просто number и возвращает numberWithLogs, ведь теперь ей не нужно соединять логи воедино, достаточно вернуть в логах и в результате только то, что она сделала без учёта тех логов, за которые она по сути не отвечает. В итоге runNumbersWithLogs применяет функцию с операцией на число ("достаёт" из numberWithLogs само число без логов и передаёт в соответствующую функцию по типу addOne), затем сама соединяет старый лог числа с новым (опять же достаёт его отдельно из numberWithLogs и лепит вместо) и в конце возращает уже "готовый" numberWithLogs.

В итоге этот пример я могу назвать монадой (все три компонента являются её составляющими: numberWithLogs, wrapWithLogs, runNumberWithLogs). Создаётся numberWithLogs, затем она даёт возможность "превратить" входные данные в numberWithLogs и выполняет любые заданные операции над numberWithLogs (и только над numberWithLogs, runNumberWithLogs не принимает простые строки, числа или что-то другое...), которые удовлетворяют определённым условиям (получают на вход 1 аргумент number) и возвращает в итоге numberWithLogs, который можно будет продолжать использовать в любом порядке с помощью runNumberWithLogs неограниченное количество раз (т. е. пока не закончится память под логи).

Задание 3
Могу привести в пример клеточный автомат по типу "Игры в жизнь" Конвея. Несмотря на простоту, там бесконечно много исходов, что делает данный автомат в теории бесконечным. Также бесконечным автоматом можно назвать состояние вселенной в каждый момент времени. Она постоянно расширяется, изменяется и её состояниям по сути нет конца.

Задание 4
В то время как в ООП "приветствуется" изменение состояние объектов, то есть там всё постоянно меняется и одна переменная может поменять одно (или все) из своих полей большое количество раз, то в ФП стараются максимально избегать изменения состояния объектов.

Задание 5
Если у человека достаточно времени и он опытный специалист, то с помощью любого языка программирования (или же на чистом двоичном коде, но это уже совсем извращение) он может сделать что угодно. Тут скорее другой вопрос - насколько это будет эффективно с точки зрения его трудозатрат и времени (сюда входят трудозатраты и время на дальнейшее поддержание кода и работы с ним). ФП больше подходит для определённого рода задач, чем другие парадигмы. Скорее всего я могу выделить параллельное и конкурентное программирование за счёт особенностей ФП (иммутабельность переменных, чистые функции, которые не оставляют за собой сайд-эффектов, и так далее...).

Задание 6
Каррирование - это возможность разделить функцию на вложенные. Например, на вход какой-нибудь функции выгулятьКота подаётся 2 аргумента: Кот и Таня. Мы можем разделить её на набор вложенных функций, которые принимают один аргумент. Тем самым вызов функции будет выглядеть не как выгулятьКота(Таня, Кот), а примерно как выгулятьКота(Таня)(Кот).

Задание 7
Идемпотентность - гарантия того, что при выполнении того или иного действия состояние объекта изменится только один раз. Дальнейшее повторение этой же операции не повлияет на его состояние. Например, регистрация пользователя является идемпотентной операцией. Как только он зарегистрировался хоть один раз, он не может завести новый аккаунт на эти же данные. Не важно, сколько раз он будет повторно нажимать на кнопку регистрации, его статус наличия в системе не поменяется и новые аккаунты создаваться не будут. Он будет постоянно видеть одну и ту же красную надпись про то, что этот пользователь уже зарегистрирован.

Задание 8
Демон в данном контексте - фоновая служба или процесс, которые начинают свою работу при запуске системы вне зависимости от наличия пользовательских сессий и выполняют различные операции незаметно от пользователя и без его участия. Как пример они могут управлять сетевым оборудованием, вести логи для каких-нибудь важных компонентов и так далее.

@Victor2004
Copy link

Пыжов 3/147

  1. Иммутабельность (неизменяемость) - это свойство объекта, состояние которого не может быть изменено после создания.
    Пример: Договор после подписания не может быть изменён. Если нужно внести изменения, то требуется новый договор.

  2. Монада - это абстракция для обработки значений и упрощения работы с последовательностями вычислений, она позволяет сделать код более чистым.

  3. Вечный двигатель, бесконечные игры (игры у которых нет финиша или другой конечной цели).

  4. ООП - это объекты, которые взаимодействую друг с другом и могут изменяться. ФП - это функции которые получают и возвращают данные, но сами не изменяются.

  5. Вычисление чисел фибоначчи или факториала, т. к. ФП хорошо подходит для рекурсивных алгоритмов.

  6. Каррирование - это превращение функции которая принимает несколько аргументов, в последовательность функций, каждая из которых принимает один аргумент.

  7. Нажатие кнопки "Включить" повторное нажатие кнопки не поменяет результат.

  8. daemon - это фоновая программа которая выполняет определенные функции, демоны обычно запускаются при загрузке системы и не требуют взаимодействия с пользователем.

@Yasusuhi
Copy link

Панкова Алина 3/147

  1. Иммутабельность — это свойство, когда объект остаётся в первозданном виде после его создания, а любые попытки внести изменения приводят к созданию нового объекта, а не модификации старого.
    Примеры:
  1. Дошик — если раз приготовил, то к изначальному твердому виду его уже не вернуть
  2. 100 рублей — нельзя превратить её в купюру большего номинала, но можно разменять на две по 50
  1. Монада — грубо говоря, контейнер, в который можно что-то положить и потом работать с содержимым, не доставая напрямую
    Пример: Хочешь узнать, идёт ли дождь, но пока не посмотришь в окно, не узнаешь. Сам факт дождя существует, но пока ты не посмотрел в окно, для тебя его нет

  2. Цикл жизни и смерти, лента рекомендаций, беговая дорожка

  3. Я бы представила ООП как семью. Есть родители (классы), дети (объекты) и у всех есть какие-то привычки (методы), все они могут передавать традиции (наследование) ну и менять свое поведение со временем.
    ФП же в моих глазах это четкая инструкция, где мы трансформируем данные с помощью каких-либо функций

  4. Сложно придумать что-то конкретное, мне очень нравится пример с готовкой по рецепту, поэтому пусть останется он. У нас есть входные данные в виде продуктов и мы просто выполняем шаги, не меняя исходные продукты, получаем новые

  5. Каррирование, это когда функция применяет аргументы не все разом, а поочерёдно

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

  7. Фоновый процесс, который работает в системе и делает свою работу, не мешая пользователю и не требует с ним взаимодействия

@Alena648
Copy link

Alena648 commented Feb 19, 2025

Брюханова Алена - 3/147

  1. Неизменяемость – это принцип, согласно которому созданные данные или объекты не могут быть изменены, а вместо этого используется принцип версионирования, то есть вместо изменения существующих данных создаются новые с необходимыми изменениями.Пример 1: Публикация книги. Содержание уже напечатанной и опубликованной книги не может быть изменено. В дальнейшем текст можно будет корректировать, но это будет новое издание книги с изменениями.
    Пример 2: Запись голосового сообщения. Если я запишу голосовое сообщение, то уже не смогу его изменить, для этого придется записать его заново или редактировать с помощью специальных программ, но в этом случае это будет новая версия исходного голосового сообщения.
  2. Монада – паттерн программирования, позволяющий задать определенную последовательность выполнения операций над данными, избегая ошибок.
    Пример 1: Рецепт приготовления пирога. Рецепт – по сути инструкция, где прописана последовательность действий, производимых над данными (в нашем случае продуктами). В рецепте есть свои этапы: приготовить тесто, залить в форму, запечь в духовке; и результат одного этапа используется в следующем.
    Пример 2: Алгоритм решения задачи по математике, например, аппроксимация функции. Нам даны исходные данные и необходимо определить, подходит ли линейная функция для описания исходных данных. Есть свои этапы решения: определение параметров уравнения регрессии, вычисление показателей (средняя ошибка аппроксимации, коэффициент детерминации), анализ полученных показателей и вывод. На каждом новом этапе мы используем данные, полученные из предыдущего этапа.
  3. В качестве пример бесконечного автомата можно привести природу. В ней происходит смена времен года, дня и ночи, различные изменения в живой и неживой природе, и все это длится уже много лет.
    Вторым примером может послужить экономика: в ней так же происходит множество процессов: движение денег, производство и потребление товаров, спад и рост инвестиций и т.д.
  4. Главное отличие ООП от ФП заключается в подходе к решению задач и способах организации кода. В ООП данные и их поведение объединяются в одно понятие «объект», в то время как в ФП эти понятия разделяются и главным понятием уже является «функция».
  5. Задачи, для решения которых наилучшим образом подходит ФП: обработка больших объемов данных, моделирование сложных систем (движение частиц), оптимизация производительности и т.д.
  6. Каррирование – преобразование функции с несколькими аргументами в функцию с одним аргументом при помощи использования вложенности функций.
  7. Идемпотентность – свойство, при котором использование одного и того же действия к одним и тем же исходным данным дает один и тот же результат, например, дверной звонок: при нажатии на него всегда будет один и тот же результат – звуковой сигнал.
  8. Демон в системах *nix — это программа, которая запускается самой системой и работает в фоновом режиме без прямого взаимодействия с пользователем.

@polinmitrona
Copy link

Митронова Полина 3-147

  1. Иммутабельность - то же самое, что неизменяемый объект.
    Дата нашего рождения - это иммутабельное значение, распечатанный документ - иммутабельный, единственный вариант его изменить - распечатать новый
    В программирование можно привести следующий пример. Представим, что разрабатывается приложение для планирования, где каждый пользователь может составлять список задач на день. В этом случае есть объект День и его целесообразно будет сделать неизменяемым.

  2. Монада - это способ применить одно замыкание к другому.
    В качестве примера можно рассмотреть рецепт. Допустим этот рецепт включает несколько шагов (каждый шаг зависит от предыдущего):

  1. Взять тесто
  2. Раскатать тесто
  3. Добавить начинку
  4. Запечь
    Если на каком то шаге тесто испортилось, дальше уже нет смысла выполнять шаги
  1. Машина Тьюринга, космический зонд, работающий вечно

  2. В функциональном программировании единицей кода выступает функция, в то время как в объектно-ориентированном программировании - объект/класс
    Объектно-ориентированное программирование основывается на четырёх ключевых принципах: абстракция, наследование, полиморфизм и инкапсуляция.
    ФП основывается на шести концепциях: hof, чистота, рекурсия, ссылочный прозрачность, строгая и ленивая оценка, системы типов.

  3. Не могу сказать, мне кажется любую задачу можно решить несколькими способами.

  4. Каррирование - превращение функции с несколькими аргументами в функцию с меньшим количеством аргументов

  5. Идемпотентность - это когда мы вызываем одну и ту же функцию и получаем один и тот же результат
    Нажатие кнопки лифта - идемпотентно
    Поставить суп на выключенную плиту - идемпотентно

  6. Daemons - небольшие фоновые программы. Запускаются при старте системы и работают все время, пока работает компьютер или сервер. Самые распространённые демоны: crond, httpd, sshd.

@Thegad1411
Copy link

Абрамов Владислав 3/147

  1. Иммутабельность(она же неизменяемость)- объект который нельзя изменить после его создания. Пример- водительские права. После выдачи их нельзя изменить, а если изменить то они будут негодными(если изменял сам владелец) или будут считаться другим документом.
  2. Монада- интерфейсы, реализованные на конструкторах типов, которые позволяют функциям абстрагироваться от различных вариантов конструкторов типов, реализующих монаду
  3. Бесконечные машины относятся к системам или процессам, которые теоретически могут работать бесконечно долго без остановки. Часто это абстрактные или теоретические конструкции. Примером бесконечной машины является машина Алана Тьюринга, ведь при отсутствии ограничений во времени и в ленте, она может работать бесконечно
  4. пропуск
  5. пропуск
  6. Каррирование- преобразование функции с несколькими аргументами в функцию с одним аргументом. Т.е выполняется не вся функция сразу, а поочередно.
  7. Идемпотентность- вызывание одной и той же функции приводит к одному и тому же результату. Например если нажать на дверной звонок, он будет звонить. И другого результата не будет
  8. Daemon — это фоновый процесс, который работает независимо от взаимодействия с пользователем, обычно выполняя системные задачи или сервисы.

@Sispeks228
Copy link

Киселев 3/42

  1. Иммутабельность - свойство объекта, не позволяющее изменить его состояние после создания. Примером может быть дата рождения
  2. Монада — «контейнер», который хранит значение и позволяет удобно с ним работать, не извлекая напрямую. Примером может быть посылка. Пока ты не откроешь коробку, содержимое не доступно
  3. Машина Тьюринга, живые организмы, водяная мельница
  4. ООП – все строится вокруг объектов, которые хранят данные и могут взаимодействовать друг с другом. ФП – все строится вокруг функций, которые получают данные и возвращают новые, без изменения старых
  5. Могу предположить, что задачи с неизменяемыми данными и параллельными вычислениям
  6. Каррирование – способ превращать функцию, принимающую несколько аргументов, в несколько функций, каждая из которых принимает только один аргумент
  7. Включение/выключение света в комнате, подключение устройства к мобильной сети или ви-фи.
  8. Демон в *nix-системах – фоновый процесс, работающий без взаимодействия с пользователем

@kanclusion
Copy link

Канашин Дмитрий 3/42

  1. Иммутабельность - это свойство объекта, которое позволяет ему не быть изменённым после создания.
    Например, фотография. Мы не можете изменить уже сделанный снимок, но можете создать новый, отредактировав его копию.
  2. Монада - это что-то что оборачивает значение и помогает работать с ним.
  3. Бесконечный генератор случайных чисел, рекурсия без условий выхода.
  4. В ФП всё строится вокруг функций в то время, как в ООП - вокруг объектов. В ФП данные и функции разделены, а в ООП данные и действия над ними находятся внутри объектов.
  5. Параллельные вычисления.
  6. Каррирование - это процесс преобразования функции, которая принимает несколько аргументов, в последовательность функций, каждая из которых принимает только один аргумент.
  7. Идемпотентность - это свойство операции, при котором повторное выполнение даёт тот же результат, что и одно выполнение. Если нажать на выключателе "выкл" один раз, свет погаснет. Если нажимать на него ещё и ещё, ничего не изменится т.к свет уже выключен.
  8. Демон в *unix-системах - это процесс, который запускает системой и работает в фоновом режиме без прямого взаимодействия с пользователем.

@Egorius1268
Copy link

Egorius1268 commented Feb 19, 2025

Фролов Егор 3/42

  1. Иммутабельность – это свойство объекта, которое означает то, что после создания объекта или функции изменить мы его/ее не можем, поскольку при внесении изменений будет создан новый объект или функция с этими измененными данными
    Например, после выпуска игры изменить ее можно только создав новую версию и загрузив эту обновленную версию. Или после создания партии табуреток они остаются неизменными и при внесении правок в нее получится новая табуретка.

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

  3. Нескончаемая (или бесконечная) машина – это некая гипотетическая машина, которая бесконечно совершает свою работу. Ввиду известных нам законов физики, бесконечные машины в реальности считаются невозможными.
    Примером может являться машина Тьюринга, ведь в ее составе находится бесконечная магнитная лента, что позволяет ей работать бесконечно. Или можно взять машину, которая последовательно показывает все числа, она будет работать бесконечно, поскольку количество чисел бесконечно.
    Вообще, если нет условий для остановки машины и нет внешних сил, препятствующих выполнению, то машина никогда не остановится.

  4. В ООП все представлено объектами, в ФП – функциями. В ООП данные часто находятся в объектах, в ФП данные находятся вне функций и используются на входе функций.

  5. Любую задачу можно выполнить с точки зрения разных парадигм, в том числе и с точки зрения парадигмы функционального программирования, другой вопрос – насколько эффективно будет выполнена задача. Функциональное программирование эффективно применять в задачах, связанных с обработкой большого количества данных, поскольку есть возможность параллельных вычислений и отсутствие сайдэффектов.

  6. Каррирование позволяет разбить функцию, которая принимает несколько аргументов, на несколько вложенных функций, которые принимают по одному аргументу.

  7. Повернули кран с горячей водой – потекла горячая вода. Если бесконечно поворачивать кран с горячей водой – горячее она не станет (может стать холоднее, если жкх горячую воду отключит)

  8. Демоны в UNIX системах это тоже самое, что и службы в Windows – некие программы, которые запускаются системой и работают в фоне, при этом пользователь с ней напрямую взаимодействовать не может

@ZinixZay
Copy link

  1. Иммутабельность - определение, которое подразумевает под собой неизменяемость какого-либо объекта. Изменение объектов не предполагается. Вместо него - модификация, которая создает новый объект, не изменяя старый.
    Майнкрафт иммутабилен. из версии 1.5.2 появилась версия 1.5.3, при этом 1.5.2 не изменилась
  2. Монада - абстракция, которая описывает обособленный процесс, работая с его контекстом не изменяя своего поведения под действием внешних источников. Монады можно рассматривать с точки зрения независимых автоматов, между которыми можно выстраивать цепочки последовательных выполнений
  3. Генератор чисел фибоначчи. Автомат переселения постояльцев парадокса "Гранд отеля" https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%BE%D0%BA%D1%81_%C2%AB%D0%93%D1%80%D0%B0%D0%BD%D0%B4-%D0%BE%D1%82%D0%B5%D0%BB%D1%8C%C2%BB
  4. в ООП данные хранятся в виде "объектов" - совокупности атрибутов и методов. Нет требований к обязательной неизменяемости данных, их поведению. В ФП данные обрабатываются по заранее определенным правилам. Данные не изменяются
  5. Не знаю, есть ли такие. Просто некоторые подходы реализовать в ООП невозможно, например, рекурсию.
  6. Каррирование - подход в ФП, который позволяет разбить функцию с несколькими аргументами на цепочку вызовов функций, каждая из которых принимает меньшее ко-во аргументов
  7. Идемпотентности - свойство операции, которое подразумевает под собой неизменность выхода (при одинаковом входе) независимо от кол-ва повторов операции.
    Когда я чищу нечищенный мандарин, он на выходе всегда без кожуры
  8. Фоновый процесс, который стартует при запуске системы и делает одну и ту же операцию без взаимодействия со стороны пользователя

@Roleng37
Copy link

Румянцев Максим 3/42

  1. Иммутабельность - это когда что-то создано и после этого не может быть изменено. Это как книга, которую напечатали и выпустили - ее содержание не изменится, новую информацию можно только добавить в новое издание.
  2. Монада , что-то вроде способа организовать код, чтобы он был более чистым, безопасным и легким в использовании. Она помогает управлять сложными вычислениями и побочными эффектами, упрощая работу с последовательностями действий.
    Пример : Поездка на такси . Такси является монадой, которая обрабатывает нашу поездку и предоставляет результат (доставляет вас до аэропорта) вместе с дополнительной информацией , такой как временя прибытия и стоимость поездки.
  3. Часы , разные мельницы или например музыка в телефоне , которая может повторяться до бесконечности
  4. ООП это что-то вроде подхода, который фокусируется на создании и управлении объектами, которые имеют свои собственные свойства и поведение , а ФП это подход, который фокусируется на использовании функций для обработки и преобразования данных, без изменения исходных данных.
  5. Проверка, является ли число простым или рассчитать сумму элементов списка
  6. Каррирование - это способ разбить сложную функцию на более простые и управляемые части, что делает ее более удобной в использовании и повторном использовании
  7. Закрыть дверь . Если закрыть дверь, она будет закрыта , а если снова закрыть дверь, то она останется закрытой.
  8. Демон в *nix-системах - это автономный процесс, который запускается при загрузке системы и работает в фоновом режиме, выполняя определенные задачи без прямого участия пользователя, обеспечивая непрерывную работу системы и ее служб.

@sergeykochiev
Copy link

1
иммутабельность - это свойство обьекта, которое описывает его неспособность к изменению, например, строки в Си, которые записываются в отдельную область памяти программы при компиляции.

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

3
положение атома в пространстве. поскольку пространство бесконечно, положений молекулы в пространстве тоже бесконечное количество, следовательно, это бесконечный автомат.

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

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

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

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

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

@fuyom
Copy link

fuyom commented Feb 19, 2025

Бакнина Лиза 3/42

  1. Иммутабельность — это свойство объекта, при котором он не может быть изменен после создания. Если нужно что-то изменить, нужно создать новый объект. Например, пленочное фото. Когда вы фотографируете на пленку,изображение фиксируется на пленке и не может быть изменено, единственный выход - сделать фото еще раз.
  2. Монада — это своего рода "умный контейнер", который получает на вход данные и то, как с ними необходимо работать. Нельзя просто взять значение из контейнера, но можно сказать: "Сделай что-то с этим значением, следуя правилам". Например почтовый ящик в подъезде. Если в него пришла кватинция, ты её забираешь и оплачиваешь счета, а если он пустой, то радуешься что не надо ни за что платить.
  3. Что-то банальное по типу водяной мельницы. Она будет продолжать функционировать до тех пор, пока есть поток воды. Еще пример: круговорот воды в природе. Или может работа завода 24/7. Можно сказать, что он работает "бесконечно", если есть смены рабочих, постоянное снабжение ресурсами и техническое обслуживание.
  4. ООП строится вокруг объектов, которые содержат данные (поля) и методы (функции) для работы с этими данными. ФП строится вокруг функций, которые принимают данные и возвращают результат, избегая изменяемых состояний и побочных эффектов.
  5. Каррирование — это процесс преобразования функции, которая принимает несколько аргументов, в последовательность функций, каждая из которых принимает только один аргумент. Обычная функция: f(a, b, c) — принимает три аргумента сразу. После каррирования: f(a)(b)(c) — принимает аргументы по одному.
  6. Например при укусе зомби персонаж перевоплощается. Если персонаж уже укушен и снова подвергается укусу (например, от того же зомби), он все равно остается зомби. Таким образом, действие "укушенный зомби" является идемпотентным: вы можете укусить персонажа множество раз, но после первого укуса результат остается неизменным — он уже зомби.
  7. Демон (daemon) в *nix-системах — это фоновый процесс, который работает без взаимодействия с пользователем и выполняет определённые задачи. Обычно демоны запускаются при старте системы и работают в фоне

@Mary2811
Copy link

Белова Мария 3/42

  1. Что такое иммутабельность? Приведите несколько примеров.
    Иммутабельность — это свойство объектов, которое означает, что их состояние не может быть изменено после создания.
    Пример: наверное, строки в Python. Если изменить строку, создается новая строка, а старая остается неизменной.
  2. Опишите монаду. Приведите несколько примеров.
    Монада — это абстракция, которая обеспечивают способ последовательного выполнения операций, оборачивая значения в контексты.
  3. Приведите несколько примеров бесконечных автоматов.
    Бесконечные автоматы — модели вычислений, которые могут продолжать работу бесконечно.
    Примеры: машина Тьюринга
  4. В чем разница между ООП и ФП?
    ООП: основной акцент делается на объектах и их взаимодействиях.
    ФП: основной акцент на функциях, которые рассматриваются как первичных элементах.
  5. Приведите примеры задач, которые можно решить только с помощью ФП.
    Ну наверное, обработка потоков данных и параллельные вычисления
  6. Как вы понимаете каррирование?
    Каррирование — это когда функции с несколькими аргументами преобразуетс в последовательность функций с одним аргументом.
  7. Пример идемпотентности в реальной жизни.
    Идемпотентность — это свойство операции, при котором повторное применение операции не изменяет результат после первого применения.
    Пример в реальной жизни: отправка сообщения, может быть. Если отправить сообщение кому-то, повторная отправка того же сообщения не изменит результат — получатель все равно получит одно и то же сообщение.
  8. Что такое демон в системах *nix?
    Я не знаю, что это такое.

@lisl1ll
Copy link

lisl1ll commented Feb 19, 2025

Аксенова Анастасия - 3/42

  1. Иммутабельность – это объект, который не изменяется после создания, вместо этого при модификации создаётся новый объект. Изначальный объект не связан с ним, то есть не меняется.
    Напечатанный журнал может являться примером иммутабельности. Его содержание не меняется.
  2. Монада – это контекст в контексте и применённая к ним функция с последовательными действия.
    Например посадка семян –> полив –> обработка почвы от сорняков –> через время получение овощей
  3. Вендинговый автомат – ввод данных: выбранный товар, оплата. Ожидание оплаты – состояние. После оплаты выдача товаров.
    У автомата есть информация о том какой товар был выбран и следовательно его стоимость.
  4. В ООП программа является набором объектов, которые взаимодействует с друг с другом.
    В фп же всё функции, которые мы не объединяем, а делим на более маленькие
  5. Композиция функций.
  6. Каррирование - разбитие функции в последовательность функций.
  7. Идемпотентности - свойство операции, при котором при многократном вызове не меняется результат.
    Примером может послужить закрытие двери, если она закрыта, то как не пытайся закрыть её ещё, состояние не изменится
  8. Это фоновый процесс, который запускается независимо от действий пользователя при включении устройства.

@AlyonaUi
Copy link

Данилова Алёна 3/42

  1. Immutability - свойство объекта, при котором объект не может быть изменён после создания. При какой-либо модификации будет создан новый объект, который потом уже будет изменяться.
    Примером может послужить const в каких-нибудь языках программирования или строка в питоне.
    Вне программирования можно привести в пример документы. Данные документа уже неизменны, иначе это будет уже новый документ.
  2. Монады - это особый тип данных, который позволяет задавать последовательность выполнения операций. Это контейнер, который хранит значение произвольного типа и функцию связывания, которая принимает два аргумента - текущее значение монады и функцию, которая может производить какое-то действие над текущим значением монады и возвращать новую монаду. Монада помогает скомпановать и упорядочить последовательность каких-либо действий.
    Примером может служить рецепт приготовления, например, супа: допустим нам нужно почистить овощи, порезать их, сварить и так далее. Возьмём картошку - почистим её - получим очищенную картошку, которую потом порежем и получим нарезанную картошку. Начальное значение - неочищенная картошка, чистка - связывающая функция, новое состояние - очищенная картошка и так далее. Причём то же можно сделать и с капустой, свеклой или другими овощами, сам этап не изменится.
  3. Круговороты в природе (например круговорот воды: вода испаряется, конденсируется, выпадает в виде осадков и снова возвращается в океаны, реки) или маятник (теоретически в идеальной среде он будет колебаться вечно)
  4. ООП основано на использовании объектов, которые могут хранить в себе данные и связанное с ними поведение, а решение задач представляется как взаимодействие этих объектов. Такой подход обычно более понятный, но объёмный.
    ФП основано на использовании функций. В идеале - никаких данных не хранится, только описываются какие-то действия или вычисления (решение какой-то задачи) с помощью функций, а потом просто подаются на вход какие-то значения и какие-то значения получаются на выходе и всё.
  5. Обработка большого объёма данных (использование ФП ускоряет обработку благодаря возможности параллельной обработки и чистым функциям); Решение уравнений и символьных вычислений
  6. Каррирование - это преобразование функции с множеством аргументов в набор вложенных функций с одним аргументом, каждая из которых принимает один аргумент и даёт новую функцию, которая ждёт следующий аргумент.
  7. Например снятие одежды - если человек уже снял куртку, повторное снятие куртки не изменит факт её отсутствия. Куртка останется снятой.
    Или открытие окна - если окно открыто, попытка открыть его повторно не приведёт к изменению его состояния. Окно останется открытым.
  8. Демон в *nix системах — это программа, которая запускается самой системой и работает в фоновом режиме без прямого взаимодействия с пользователем.

@marakiri
Copy link

  1. Иммутабельность:
    Иммутабельность — это свойство объекта, которое означает, что его состояние нельзя изменить после создания. Вместо изменения существующего объекта создается новый объект с измененными данными. В Python строки являются иммутабельными. Например, если вы попытаетесь изменить строку, создастся новая строка, а старая останется неизменной.
  2. Монада:
    Монада — это концепция в функциональном программировании, которая позволяет структурировать вычисления, работающие с контекстом (например, обработка ошибок, асинхронные операции). Монады позволяют связывать операции в цепочку, сохраняя контекст.
  3. Бесконечные автоматы:
    Бесконечные автоматы — это абстракции, которые могут обрабатывать бесконечные потоки данных или выполнять бесконечные вычисления. Автомат, моделирующий бесконечную вселенную в компьютерной игре (например, Minecraft).
  4. Разница между ООП и ФП:
    ООП (Объектно-ориентированное программирование):
    Данные и поведение объединены в объекты. Объекты могут изменять свое состояние. Акцент делается на инкапсуляции, наследовании и полиморфизме.
    ФП (Функциональное программирование):
    Данные обрабатываются с помощью функций, которые не изменяют состояние, а возвращают новые значения. Акцент делается на чистоте функций, иммутабельности и композиции.
  5. Задачи, которые можно решить только с помощью ФП:
    Обработка бесконечных потоков данных (например, с использованием ленивых вычислений).
    Задачи, требующие высокой степени параллелизма и неизменяемости данных (например, MapReduce).
    Задачи, где важна математическая корректность и отсутствие побочных эффектов (например, формальная верификация).
  6. Каррирование:
    Каррирование — это процесс преобразования функции с несколькими аргументами в последовательность функций, каждая из которых принимает один аргумент.
  7. Идемпотентность:
    Идемпотентность — это свойство операции, при котором повторное выполнение операции не изменяет результат. Удаление файла: если вы попытаетесь удалить уже удаленный файл, результат не изменится.
  8. Демон в *nix системах:
    Демон — это фоновый процесс, который запускается при старте системы и выполняет определенные задачи без взаимодействия с пользователем. Демоны обычно используются для обслуживания системных задач, таких как управление сетью, базами данных или серверами.

@0x0e4
Copy link

0x0e4 commented Feb 19, 2025

Ермолаев М. 3/42

  1. Иммутабельность - свойство объекта, которое означает, что объект нельзя изменить после его создания. В качестве примера можно привести CPU, который вы не сможете как-либо изменить (разве что оторвать SMDшки =P). Или же подписанный документ, который уже нельзя изменить, можно лишь подписать новый.

  2. Монада - это способ упрощения работы с данными, операциями, монада является абстракцией, которая позволяет работать с данными, оборачивая вычисления в "контейнер". Для примера можем взять написание домашней работы - это приходится делать каждый раз, но каждый раз производимые операции будут разными.

  3. Машина Тьюринга, игра в жанре "песочница", while(true)

  4. Если ООП сосредоточено на объектах и их взаимодействиях, то в ФП акцентируется внимание на функции и иммутабельные данные.

  5. Рекурсивные задачи (вычисление чисел Фибоначчи), обработка списков

  6. Каррирование - это преобразование функции с несколькими аргументами в несколько функций с одним аргументом.

  7. Идемпотентность - это свойство функции, при котором после первого выполнения результат последующих вызовов функции не изменится. Например, возьмём заряженный конденсатор и разрядим его, замкнув контакты. Таким образом, мы его разрядили, и при последующих попытках разрядить заряд конденсатора не изменится, он просто будет нулевой.

  8. Демон в *nix системах представляет собой процесс, который выполняется в фоновом режиме. Обычно демоны запускаются при старте системы

@Nohop09
Copy link

Nohop09 commented Feb 19, 2025

Гусев Иван 3/42

1 Иммутабельность - свойство объекта, при котором его свойства не могут быть изменены после создания. Она предполагает создание копии существующих данных или структуры, когда необходимы изменения, и добавление этих изменений туда. Пример: строки в js, методы в String.prototype предоставляют возможность только для чтения или же возвращают новую строку
2 Монада — это концепция, которая представляет собой абстракцию для работы с вычислениями, которые могут иметь побочные эффекты или быть неявно комбинируемыми.
3 Вселенная, квантовые вычисления
4 Основное различие между ООП и ФП заключается в подходах к организации программ и в том, как обрабатываются данные и поведение. В частности, полиморфизм в ООП и ФП реализуется разными способами.
В ООП полиморфизм реализуется через объекты и методы. В ФП
полиморфизм реализуется не через объекты и методы, а через функции. В ФП чаще всего используется параметрический полиморфизм
5 Я считаю, что любую задачу можно решить в любой парадигме программирования. Разница заключается в том, какие усилия потребуются для реализации
6 Каррирование - это техника, при которой функция, принимающая несколько аргументов, преобразуется в последовательность функций, каждая из которых принимает один аргумент
7 Включение/выключение света.
8 Демон - процесс в фоне, который работает в системе без взаимодействия с пользователем.

@7YearsOldTalent
Copy link

Самойлов 3/42

  1. Иммутабельность это когда что-то нельзя изменить после создания. Например, если у тебя есть счёт в банке, ты не можешь изменить прошлые транзакции
  2. Монада позволяет организовывать последовательности вычислений с учётом контекста
  3. Бесконечные машины — это что-то, что работает бесконечно, пока его не остановят. Часы тикают бесконечно, пока батарейка не сядет. Если поставить музыкальный плейлист на повтор, он будет играть бесконечно
  4. ООП основано на объектах и классах, которые взаимодействую друг с другом. ФП основано на функциях, которые не изменяются
  5. ФП позволяет легко работать с рекурсией, что полезно для численного решения дифференциальных уравнений
  6. Каррирование это когда ты разбиваешь функцию с несколькими аргументами на несколько функций, каждая из которых принимает один аргумент
  7. Сколько бы раз ты ни нажимал на выключатель, свет всё равно будет выключен
  8. Программа, которая работает в фоновом режиме

@CBEPXPA333YM
Copy link

CBEPXPA333YM commented Feb 19, 2025

  1. Иммутабельность - свойство какого-либо объекта. Оно заключается в том, что объект не может меняться после того, как был создан. Чтобы изменить этот объект, придется создавать новый такой объект или версию. Например, хотфикс для любой программы будет отдельной ее версией, потому что нельзя поставить обновление для всех компьютеров одновременно.
  2. Насколько я понял, монады позволяют связывать функции, работая с их содержимым. Например, монадой можно назвать процесс приготовления какого-либо блюда, например яичницы. Процесс изготовления состоит из нескольких функций: разбить яйца, взбить яйца с молоком, нагреть сковороду, приготовить блюдо. Каждый из этих этапов связан между собой и работает с результатом предыдущего этапа.
  3. Бесконечные автоматы - абстрактные устройства, количество состояний которых бесконечно. Примером бесконечных автоматов являются игры с процедурной генерацией: песочницы или приключения, такие как Minecraft и No man's sky или рогалики, такие как Dead cells или The binding of Isaac.
  4. ООП и ФП - это два различных подхода к программированию. ООП предполагает наличие классов и объектов классов, внутри которых содержатся методы, способные изменить состояния полей класса. ООП построено так, что вся информация структурирована для анализа человеком. ФП же строится на функциях, принимающих и выдающих информацию. Суть программы, построенной на ФП, заключается в вычислениях, а не в изменении объектов.
  5. Я не думаю, что существуют такие задачи, которые можно решить только с помощью ФП. Просто для одних задач будет удобнее использовать один метод, а для других - другой.
  6. Каррирование - преобразование функции с несколькими аргументами в несколько вложенных функций с одним аргументом
  7. Идемпотентность - это свойство какого-либо объекта. Заключается она в том, что если применить какую-либо функцию к объекту несколько раз, то она будет выдавать одни и те же значения. Например, поднять паруса на корабле можно лишь один раз - когда они опущены, при повторной попытке это сделать паруса останутся поднятыми
  8. daemon - это фоновые процессы, которые выполняются в системах и не взаимодействуют с пользователем напрямую.
    Лебедев Егор 3/147

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests