20230930202611 #учу/ФП
- "Функцiональне програмування" - "Функциональное программирование" (ФП)
- [[ФП - Лекция 4]]
- --> [[ФП - UA - Лекцiя 5]]
- <-- [[ФП - UA - Лекцiя 3]]
- ЧИСТА функціональна мова з "лінивою" семантикою та поліморфною СТАТИЧНОЮ типізацією
- статична - все перевіряється при компіляції, а за реалізації - не грає ролі.
- http://haskell.org
- стандарти Haskell 1990 -> 2010 -> ...
- Haskell Platform
- GHC - компілятор (Глазго Haskell компілятор)
- GHCi - інтерпретатор <--
- Cabal – набір бібліотек
- ставити та запускати ... Подробиці: є зміна стандартів мови
- Знак = не оператор присвоювання -> зв'язування (глобальне та локальне)
- Глобальне - з нульовим відступом
x = 2 -- глобальный (x)
y = 42
shoto = let z = x + y -- локальный z
in print z
- конструкція let ... in у компіляторі - локальне зв'язування
- let - в інтерпретаторі - глобальне зв'язування
- перший символ ідентифікатора - нижній регістр
- якщо у верхньому регістрі - відноситься до конкретних типів
- Завдання функції add глобально, змінні x y - локально
add x y = x + y
- перший індентифікатор - це функція, інші - аргументи цієї функції.
- незалежність від порядку (викликати функцію – визначати функцію)
shoto = add 40 2 -- вызов
add x y = x + y -- определение
- не можна міняти (немає змінних)
z = 1 -- ок
z = 2 -- ошибка
q q = \q -> q -- ок
- лiнивоiсть
qq> let k = \x y -> x
qq> k 42 undefined
42
- undefined - спеціальна функція "затикати дірки" - функція, що розходиться завжди
- У Haskell - функція обчислюється, а аргументи викликаються лише коли вони потрібні (на відміну імперативних мов)
- Рекурсія
long factorial (int n)
{
long res = 1;
while (n > 1)
res *= n--;
return res;
}
factorial n = if n > 1
then n * factorial (n-1)
else 1
factorial n = if n > 1 then n * factorial (n-1) else 1
- ... відеоролик "Вступ до Haskell" ... до 39 хвилини
- базові типи
- Система модулів
- Оператори та перерізи
- --> [[ФП - UA - Лекцiя 5]]
- <-- [[ФП - UA - Лекцiя 3]]