[s5 | 2022] Функциональное программирование, Serokell, лекция 13

YOUTUBE · 30.11.2025 09:13

Ключевые темы и таймкоды

Обсуждение дифференц-листа

0:04
  • В лекции обсуждается понятие дифференц-листа и его применение в функциональном программировании.
  • Рассматриваются различные реализации дифференц-листа, их преимущества и недостатки.

Строгость и мутабельные объекты

10:09
  • Обсуждается понятие строгости в хаскеле и его применение для избежания промежуточных структур во время вычислений.
  • Рассматриваются мутабельные объекты и их использование в функциональном программировании.

Примеры использования дифференц-листа

11:24
  • Демонстрируются примеры использования дифференц-листа для вычисления функций из списка в список.
  • Обсуждается, как правильно расставлять скобки в дифференц-листах для достижения оптимальной производительности.

Заключение

13:00
  • В заключение лекции обсуждаются другие типы данных, такие как сикс-модуль и фингер три, и их применение в функциональном программировании.

Обсуждение функций и сверток

14:07
  • В видео обсуждается функция сик, которая вычисляет первый аргумент и возвращает второй аргумент.
  • Обсуждается поведение функции сик, которая может быть успешной или неудачной в зависимости от аргументов.

Свертки и их применение

16:11
  • Обсуждается свертка списка, которая вычисляет сумму элементов списка.
  • Рассматривается свертка с использованием фолдера и фолла, которые отличаются по способу накопления аргументов.

Примеры с фолдером и фоллом

24:15
  • Обсуждаются примеры с фолдером, конъюнкцией фолсов и бесконечным списком из фолсов.
  • Обсуждаются последствия вызова фолдера с конъюнкцией фолсов и фоллом с бесконечным списком из фолсов.

Рекурсия и аккумуляторы

24:30
  • Обсуждается использование аккумуляторов для решения задач с рекурсией.
  • Рассматривается пример функции, которая вычисляет сумму элементов списка с использованием аккумулятора.

Проблемы с аккумуляторами

25:36
  • Обсуждаются проблемы, связанные с аккумуляторами, такие как использование большого выражения и возможное потребление памяти.

Нормальная форма и дипсек

31:11
  • Обсуждается понятие нормальной формы и дипсек, которые позволяют вычислять значения до нормальной формы.
  • Рассматриваются примеры использования нормальной формы и дипсек для решения задач с аккумуляторами.

Панк-паттерн

36:54
  • Обсуждается панк-паттерн, который позволяет избежать использования аккумуляторов.
  • Рассматривается пример функции, которая вычисляет сумму элементов списка без использования аккумуляторов.

Введение в ленивые вычисления

39:13
  • В видео обсуждается ленивое вычисление аккумулятора, который вычисляется только при необходимости.
  • Аккумулятор вычисляется до тех пор, пока список не является пустым.

Расширение синтаксиса

39:44
  • Вводится новый продакшн знак воскресания, который позволяет расширить синтаксис языка.
  • Важно записывать знаки восклицания в префиксном виде, иначе они воспринимаются как инфекные операторы.

Вычисление аргументов

41:14
  • Бэнк паттерн вычисляет аргумент, стоящий после него, то есть примыкающий к нему.
  • Бэнк паттерн можно вставлять в любое место, где есть идентификаторы, например, в конструкторах и выражениях.

Альтернативные аппликации функций

43:12
  • В лямдах можно использовать банк паттерн, который вычисляет аргумент до формы и затем применяет функцию.
  • Альтернативные аппликации функций: доллар пэнк и бэк-бэк вычисляют аргумент до формы и вызывают функцию на нем.

Контрольный вопрос

44:47
  • В чем отличие между эф один и два?
  • Ответ: они ничем не отличаются, так как оба вычисляют до форм.

Обсуждение функций и паттерсов

46:10
  • В видео обсуждается использование паттерсов и тильды в функциях.
  • Паттерсы позволяют избежать лишней строгости и избежать возможных эксцепшенов.

Примеры использования паттерсов

51:17
  • В примере с функцией "лейзи хэт" паттерсы используются для определения порядка аргументов.
  • В примере с функцией "сумма типов" паттерсы не используются, так как в ней нет смысла.

Вопросы и ответы

56:18
  • Обсуждаются вопросы по использованию паттерсов и их эквивалентности.
  • В одном из примеров паттерсы нельзя использовать с дефайтом, так как это может привести к ошибкам.

Строгие поля и типы данных

57:58
  • В видео обсуждается использование строгих полей и типов данных в программировании на Хаскеле.
  • Строгие поля указывают, что все вычисления должны быть выполнены мгновенно, что может уменьшить количество танков и спейс-лик.

Библиотека фолд и фолду

1:04:00
  • В видео упоминается библиотека фолд и фолду, которая позволяет избавиться от спейс-лик и дефришна.
  • Фолд и фолду используют аппликативные операторы для вычисления функций мгновенно.

Иллюстрация спейс-лик

1:08:59
  • В видео приводится пример спейс-лик, который может быть линейным или нелинейным в зависимости от количества выполняемых функций.
  • Будьте осторожны с спейс-лик, так как они могут вызвать проблемы с производительностью и памятью.