Skip to content

Latest commit

 

History

History
94 lines (82 loc) · 3.31 KB

ФП - UA - Лекцiя 4.md

File metadata and controls

94 lines (82 loc) · 3.31 KB

20230930202611 #учу/ФП


  • "Функцiональне програмування" - "Функциональное программирование" (ФП)
  • [[ФП - Лекция 4]]
  • --> [[ФП - UA - Лекцiя 5]]
  • <-- [[ФП - UA - Лекцiя 3]]

Тема: Haskell - принципи програмування

Мова Haskell

  • ЧИСТА функціональна мова з "лінивою" семантикою та поліморфною СТАТИЧНОЮ типізацією
  • статична - все перевіряється при компіляції, а за реалізації - не грає ролі.
  • 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]]