SlideShare ist ein Scribd-Unternehmen logo
1 von 136
Downloaden Sie, um offline zu lesen
Функциональное
программирование
Александр Алексеев
Парадигмы
программирования
– Процедурное программирование
– Объектно-ориентированное программирование
– Функциональное программирование
– Логическое программирование
– и другие...
Процедурное
программирование
– Pascal
– Си
– и другие...
Языки процедурного программирования:
Объектно-
ориентированное
программирование
– Java
– C#
– Delphi (Object Pascal)
– C++
– Python
– Perl, Perl 6
– PHP5
– и многие другие
ООП-языки:
Функциональное
программирование
Функциональное
программирование
Функциональное
программирование
Все очень просто!
Основы
(на примере Haskell)
data Bool = True | False
data Bool = True | False
positive :: Int → Bool
positive x = x > 0
data Bool = True | False
positive :: Int → Bool
positive x = x > 0
max :: (Ord a) => a → a → a
max x y
| x > y = x
| otherwise = y
data Person = Person {
firstName :: String,
lastName :: String,
birthYear :: Int
} deriving (Show)
data Person = Person {
firstName :: String,
lastName :: String,
birthYear :: Int
} deriving (Show)
alex = Person {
firstName = "Александр",
lastName = "Алексеев",
birthYear = 1988
}
class Eq a where
(==), (/=) :: a -> a -> Bool
x /= y = not (x == y)
x == y = not (x /= y)
class Eq a where
(==), (/=) :: a -> a -> Bool
x /= y = not (x == y)
x == y = not (x /= y)
instance Eq Person where
x == y = birthYear x == birthYear y
class Eq a where
(==), (/=) :: a -> a -> Bool
x /= y = not (x == y)
x == y = not (x /= y)
instance Eq Person where
x == y = birthYear x == birthYear y
x /= y = not (x == y)
anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
alex == anton False
anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
alex == anton False
alex == alex True
anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
alex == anton False
alex == alex True
anton == alex False
anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
alex == anton False
alex == alex True
anton == alex False
anton /= alex True
instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
x `compare` y = birthYear y `compare` birthYear x
instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
x `compare` y = birthYear y `compare` birthYear x
max :: (Ord a) => a → a → a
instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
x `compare` y = birthYear y `compare` birthYear x
max :: (Ord a) => a → a → a
max alex anton
instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
x `compare` y = birthYear y `compare` birthYear x
max :: (Ord a) => a → a → a
max alex anton
birthYear (max alex anton) == 1988
Каррирование
(англ. currying)
max :: (Ord a) => a → a → a
max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max' = max alex
max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max' = max alex
max' :: Person → Person
max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max' = max alex
max' :: Person → Person
max' anton :: Person
max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max' = max alex
max' :: Person → Person
max' anton :: Person
birthYear (max' anton) == 1988
Лямбда-
функции
Лямбда-
функции
(λ)
(x y → x + y)
(x y → x + y)
(x y → x + y) :: ?
(x y → x + y)
(x y → x + y) :: Num a => a → a → a
(x y → x + y)
(x y → x + y) :: Num a => a → a → a
(x y → x + y) 3 4
(x y → x + y)
(x y → x + y) :: Num a => a → a → a
(x y → x + y) 3 4
(x y → x + y) 3 4 == 7
Кортежи
(1, 2)
(1, 2)
('a', 'b')
(1, 2)
('a', 'b')
(1, 2, 3, 4)
(1, 2)
('a', 'b')
(1, 2, 3, 4)
(1, 'a')
(1, 2)
('a', 'b')
(1, 2, 3, 4)
(1, 'a')
('a')
(1, 2)
('a', 'b')
(1, 2, 3, 4)
(1, 'a')
('a')
( )
(1, 2)
('a', 'b')
(1, 2, 3, 4)
(1, 'a')
('a')
( )
(1, (2, 'a'), 3)
(1, 2)
('a', 'b')
(1, 2, 3, 4)
(1, 'a')
('a')
( )
(1, (2, 'a'), 3)
fst (1, 2) == 1
(1, 2)
('a', 'b')
(1, 2, 3, 4)
(1, 'a')
('a')
( )
(1, (2, 'a'), 3)
fst (1, 2) == 1
snd (1, 2) == 2
(1, 2)
('a', 'b')
(1, 2, 3, 4)
(1, 'a')
('a')
( )
(1, (2, 'a'), 3)
fst (1, 2) == 1
snd (1, 2) == 2
snd (1, (2, 'a'), 3) == (2, 'a')
Списки
[1, 2, 3]
['a', 'b', 'c']
[ ]
[ [1, 2], [3, 4] ]
[ (1, 'a'), (2, 'b'), (3, 'c') ]
head :: [a] → a
head [4, 8, 15, 16, 23, 42] == 4
tail :: [a] → [a]
tail [4, 8, 15, 16, 23, 42] == [8, 15, 16, 23, 42]
head :: [a] → a
head [4, 8, 15, 16, 23, 42] == 4
tail :: [a] → [a]
tail [4, 8, 15, 16, 23, 42] == [8, 15, 16, 23, 42]
init :: [a] → [a]
init [4, 8, 15, 16, 23, 42] == [4, 8, 15, 16, 23]
last :: [a] → a
last [4, 8, 15, 16, 23, 42] == 42
length :: [a] → Int
length [4, 8, 15, 16, 23, 42] == 6
null :: [a] → Bool
null [ ] == True null [1, 2, 3] == False
reverse [1, 2, 3] == [3, 2, 1]
take 3 [1, 2, 3, 4, 5] == [1, 2, 3]
drop 3 [1, 2, 3, 4, 5] == [4, 5]
sum [1, 2, 3, 4, 5] == 15
[1, 2, 3] ++ [4, 5] == [1, 2, 3, 4, 5]
Генераторы
списков,
интервалы,
ленивые вычисления
[ x * 2 | x ← [1, 2, 3] ] == [2, 4, 6]
pairs = [ (x, y) | x ← [1, 2], y ← ['a', 'b'] ]
pairs == [ (1,'a'), (1,'b'), (2,'a'), (2,'b') ]
[ x * 2 | x ← [1, 2, 3] ] == [2, 4, 6]
pairs = [ (x, y) | x ← [1, 2], y ← ['a', 'b'] ]
pairs == [ (1,'a'), (1,'b'), (2,'a'), (2,'b') ]
[1..5] == [1, 2, 3, 4, 5]
[2,4..10] == [2, 4, 6, 8, 10]
[1..] == [1, 2, 3, 4, 5, 6, 7, 8, 9, …]
take 3 [1..] == [1, 2, 3]
[ x * 2 | x ← [1, 2, 3] ] == [2, 4, 6]
pairs = [ (x, y) | x ← [1, 2], y ← ['a', 'b'] ]
pairs == [ (1,'a'), (1,'b'), (2,'a'), (2,'b') ]
[1..5] == [1, 2, 3, 4, 5]
[2,4..10] == [2, 4, 6, 8, 10]
[1..] == [1, 2, 3, 4, 5, 6, 7, 8, 9, …]
take 3 [1..] == [1, 2, 3]
cycle [1, 2, 3] == [1, 2, 3, 1, 2, 3, 1, 2, 3, … ]
take 5 $ cycle [1, 2, 3] == [1, 2, 3, 1, 2]
Функции
высшего порядка
filter :: (a -> Bool) -> [a] -> [a]
filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (x → x + 5) [1,2,3] == [6,7,8]
filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (+5) [1,2,3] == [6,7,8]
filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (+5) [1,2,3] == [6,7,8]
foldl :: (a -> b -> a) -> a -> [b] -> a
filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (+5) [1,2,3] == [6,7,8]
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl (s x -> x + s) 0 [1, 2, 3] == 6
filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (+5) [1,2,3] == [6,7,8]
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl (s x -> x + s) 0 [1, 2, 3] == 6
sum = foldl (s x -> x + s) 0
Пишем
собственные
функции
null' :: [a] → Bool
null' :: [a] → Bool
null' [ ] = True
null' :: [a] → Bool
null' [ ] = True
null' _ = False
null' :: [a] → Bool
null' [ ] = True
null' _ = False
head' :: [a] → a
null' :: [a] → Bool
null' [ ] = True
null' _ = False
head' :: [a] → a
head' (x:xs) = x
null' :: [a] → Bool
null' [ ] = True
null' _ = False
head' :: [a] → a
head' (x:xs) = x
head' _ = error 'Empty list!'
null' :: [a] → Bool
null' [ ] = True
null' _ = False
head' :: [a] → a
head' (x:xs) = x
head' _ = error 'Empty list!'
[1, 2, 3] == (1:(2:(3:[])))
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' func acc (x:xs) = foldl' func (func acc x) xs
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' func acc (x:xs) = foldl' func (func acc x) xs
foldl' _ acc _ = acc
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' func acc (x:xs) = foldl' func (func acc x) xs
foldl' _ acc _ = acc
elem' :: Eq a => a -> [a] -> Bool
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' func acc (x:xs) = foldl' func (func acc x) xs
foldl' _ acc _ = acc
elem' :: Eq a => a -> [a] -> Bool
elem' x (y:yx)
| x == y = True
| ...
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' func acc (x:xs) = foldl' func (func acc x) xs
foldl' _ acc _ = acc
elem' :: Eq a => a -> [a] -> Bool
elem' x (y:yx)
| x == y = True
| otherwise = elem' x yx
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' func acc (x:xs) = foldl' func (func acc x) xs
foldl' _ acc _ = acc
elem' :: Eq a => a -> [a] -> Bool
elem' x (y:yx)
| x == y = True
| otherwise = elem' x yx
elem' _ _ = False
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' func acc (x:xs) = foldl' func (func acc x) xs
foldl' _ acc _ = acc
elem' :: Eq a => a -> [a] -> Bool
elem' x (y:yx)
| x == y = True
| otherwise = elem' x yx
elem' _ _ = False
elem' 1 [1, 2, 3] == True
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' func acc (x:xs) = foldl' func (func acc x) xs
foldl' _ acc _ = acc
elem' :: Eq a => a -> [a] -> Bool
elem' x (y:yx)
| x == y = True
| otherwise = elem' x yx
elem' _ _ = False
elem' 1 [1, 2, 3] == True elem' 7 [1, 2, 3] == False
За кадром остались:
За кадром остались:
– параметризованные типы
За кадром остались:
– параметризованные типы
– монады
За кадром остались:
– параметризованные типы
– монады
– ввод/вывод
За кадром остались:
– параметризованные типы
– монады
– ввод/вывод
– аппликативные функторы
За кадром остались:
– параметризованные типы
– монады
– ввод/вывод
– аппликативные функторы
– застежки
Зачем все это нужно:
Зачем все это нужно:
– Настоящая кроссплатформенность
Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
– Отсутсвие побочных эффектов
Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
– Отсутсвие побочных эффектов
– Автоматическое распараллеливание
Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
– Отсутсвие побочных эффектов
– Автоматическое распараллеливание
– Строгая типизация
Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
– Отсутсвие побочных эффектов
– Автоматическое распараллеливание
– Строгая типизация
– и не только
Насколько быстр Haskell?
Насколько быстр Haskell?
Что можно написать на Haskell?
Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
– веб-приложения (Yesod, Happstack, etc)
Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
– веб-приложения (Yesod, Happstack, etc)
– компиляторы, парсеры (Alex, Happy)
Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
– веб-приложения (Yesod, Happstack, etc)
– компиляторы, парсеры (Alex, Happy)
– модули ядра Linux
Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
– веб-приложения (Yesod, Happstack, etc)
– компиляторы, парсеры (Alex, Happy)
– модули ядра Linux
– и многое другое
Другие ФП-языки:
Другие ФП-языки:
– Erlang
Другие ФП-языки:
– Erlang
– OCaml
Другие ФП-языки:
– Erlang
– OCaml
– Standart ML
Другие ФП-языки:
– Erlang
– OCaml
– Standart ML
– Common Lisp
Другие ФП-языки:
– Erlang
– OCaml
– Standart ML
– Common Lisp
– Scheme, Racket
Другие ФП-языки:
– Erlang
– OCaml
– Standart ML
– Common Lisp
– Scheme, Racket
– Clojure
Другие ФП-языки:
– Erlang
– OCaml
– Standart ML
– Common Lisp
– Scheme, Racket
– Clojure
– и другие
Литература
по ФП
Подборка ссылок:
Подборка ссылок:
– http://fprog.ru/planet/
Подборка ссылок:
– http://fprog.ru/planet/
– http://erlanger.ru/
Подборка ссылок:
– http://fprog.ru/planet/
– http://erlanger.ru/
– http://it-talk.org/
Подборка ссылок:
– http://fprog.ru/planet/
– http://erlanger.ru/
– http://it-talk.org/
– http://groups.google.ru/group/haskell-russian
Подборка ссылок:
– http://fprog.ru/planet/
– http://erlanger.ru/
– http://it-talk.org/
– http://groups.google.ru/group/haskell-russian
– http://groups.google.ru/group/erlang-russian
Подборка ссылок:
– http://fprog.ru/planet/
– http://erlanger.ru/
– http://it-talk.org/
– http://groups.google.ru/group/haskell-russian
– http://groups.google.ru/group/erlang-russian
– http://groups.google.ru/group/clojure-russian
Подборка ссылок:
– http://fprog.ru/planet/
– http://erlanger.ru/
– http://it-talk.org/
– http://groups.google.ru/group/haskell-russian
– http://groups.google.ru/group/erlang-russian
– http://groups.google.ru/group/clojure-russian
– http://habrahabr.ru/hub/haskell
Подборка ссылок:
– http://fprog.ru/planet/
– http://erlanger.ru/
– http://it-talk.org/
– http://groups.google.ru/group/haskell-russian
– http://groups.google.ru/group/erlang-russian
– http://groups.google.ru/group/clojure-russian
– http://habrahabr.ru/hub/haskell
– http://goo.gl/VUvjk (эта презентация)
Спасибо за внимание!
Александр Алексеев
http://eax.me/

Weitere ähnliche Inhalte

Was ist angesagt?

Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Ontico
 
Лекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поискаЛекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поискаMikhail Kurnosov
 
Лекция 5: Бинарные деревья поиска
Лекция 5: Бинарные деревья поискаЛекция 5: Бинарные деревья поиска
Лекция 5: Бинарные деревья поискаMikhail Kurnosov
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка DjangoVladimir Rudnyh
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perlmayperl
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonPython Meetup
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7Eugene Fidelin
 
Haskell. Getting started (RU)
Haskell. Getting started (RU)Haskell. Getting started (RU)
Haskell. Getting started (RU)Kirill Zonov
 
Перевод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeПеревод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeInterSystems
 
Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт GuavaEgor Chernyshev
 
ECMAScript 6 — будущее JavaScript
ECMAScript 6 — будущее JavaScriptECMAScript 6 — будущее JavaScript
ECMAScript 6 — будущее JavaScriptAlexey Simonenko
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?yiiconf
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in MagentoVrann Tulika
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоAlexander Makarov
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)Anton Bukov
 
Функциональное программирование на F#
Функциональное программирование на F#Функциональное программирование на F#
Функциональное программирование на F#akrakovetsky
 
SQL Tricky (Иван Фролков)
SQL Tricky (Иван Фролков)SQL Tricky (Иван Фролков)
SQL Tricky (Иван Фролков)Ontico
 

Was ist angesagt? (20)

Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
 
Лекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поискаЛекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поиска
 
Урок 3. Карринг и ленивые вычисления.
Урок 3. Карринг и ленивые вычисления.Урок 3. Карринг и ленивые вычисления.
Урок 3. Карринг и ленивые вычисления.
 
Лекция 5: Бинарные деревья поиска
Лекция 5: Бинарные деревья поискаЛекция 5: Бинарные деревья поиска
Лекция 5: Бинарные деревья поиска
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7
 
Haskell. Getting started (RU)
Haskell. Getting started (RU)Haskell. Getting started (RU)
Haskell. Getting started (RU)
 
Перевод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeПеревод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в Unicode
 
Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт Guava
 
ECMAScript 6 — будущее JavaScript
ECMAScript 6 — будущее JavaScriptECMAScript 6 — будущее JavaScript
ECMAScript 6 — будущее JavaScript
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in Magento
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)
 
Функциональное программирование на F#
Функциональное программирование на F#Функциональное программирование на F#
Функциональное программирование на F#
 
SQL Tricky (Иван Фролков)
SQL Tricky (Иван Фролков)SQL Tricky (Иван Фролков)
SQL Tricky (Иван Фролков)
 

Andere mochten auch

Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахAleksander Alekseev
 
ZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSONZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSONAleksander Alekseev
 
Работа с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевРабота с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевAleksander Alekseev
 
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевНовые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевAleksander Alekseev
 
New features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizersNew features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizersSergey Petrunya
 
Эволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDBЭволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDBSergey Petrunya
 
Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)Ontico
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Mail.ru Group
 
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Ontico
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодRoman Grebennikov
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit TestingDmitry Vyukov
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 
Copyrightmoyers
CopyrightmoyersCopyrightmoyers
Copyrightmoyersjenmoyers
 
Anketa talijanskih turista u hotelu "Grand", Orebić
Anketa talijanskih turista u hotelu "Grand", OrebićAnketa talijanskih turista u hotelu "Grand", Orebić
Anketa talijanskih turista u hotelu "Grand", Orebićsanja_vu
 
Comparatives & superlatives
Comparatives & superlativesComparatives & superlatives
Comparatives & superlativesLorenachumbravo
 
2009.10.05 --e marketer---marketing-to-online-video-audience
2009.10.05 --e marketer---marketing-to-online-video-audience2009.10.05 --e marketer---marketing-to-online-video-audience
2009.10.05 --e marketer---marketing-to-online-video-audiencePietro Lambert
 

Andere mochten auch (20)

Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 
ZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSONZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSON
 
Работа с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевРабота с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр Алексеев
 
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевНовые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
 
New features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizersNew features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizers
 
Эволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDBЭволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDB
 
Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный код
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit Testing
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
Jesus
JesusJesus
Jesus
 
Copyrightmoyers
CopyrightmoyersCopyrightmoyers
Copyrightmoyers
 
Anketa talijanskih turista u hotelu "Grand", Orebić
Anketa talijanskih turista u hotelu "Grand", OrebićAnketa talijanskih turista u hotelu "Grand", Orebić
Anketa talijanskih turista u hotelu "Grand", Orebić
 
Comparatives & superlatives
Comparatives & superlativesComparatives & superlatives
Comparatives & superlatives
 
FA service
FA serviceFA service
FA service
 
2009.10.05 --e marketer---marketing-to-online-video-audience
2009.10.05 --e marketer---marketing-to-online-video-audience2009.10.05 --e marketer---marketing-to-online-video-audience
2009.10.05 --e marketer---marketing-to-online-video-audience
 

Ähnlich wie Функциональное программирование - Александр Алексеев

аппроксимация функции нескольких переменных
аппроксимация функции нескольких переменныхаппроксимация функции нескольких переменных
аппроксимация функции нескольких переменныхDmitry Protopopov
 
01 - Введение в дискретную математику. Теория множеств и комбинаторика
01 - Введение в дискретную математику. Теория множеств и комбинаторика01 - Введение в дискретную математику. Теория множеств и комбинаторика
01 - Введение в дискретную математику. Теория множеств и комбинаторикаRoman Brovko
 
гдз по алгебре 11 класс алимов ш. а. и др
гдз по алгебре 11 класс алимов ш. а. и дргдз по алгебре 11 класс алимов ш. а. и др
гдз по алгебре 11 класс алимов ш. а. и дрYou DZ
 
Андрей Соболевский - Вокруг Базельской задачи: Бернулли, Эйлер, Риман
Андрей Соболевский - Вокруг Базельской задачи: Бернулли, Эйлер, РиманАндрей Соболевский - Вокруг Базельской задачи: Бернулли, Эйлер, Риман
Андрей Соболевский - Вокруг Базельской задачи: Бернулли, Эйлер, РиманYandex
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовТранслируем.бел
 
Matemat526
Matemat526Matemat526
Matemat526tesla21
 
п.3.1.2 формулы для решения квадратных уравнений
п.3.1.2 формулы для решения квадратных уравненийп.3.1.2 формулы для решения квадратных уравнений
п.3.1.2 формулы для решения квадратных уравненийNTK Narva Taiskasvanute kool
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
78b 1 гдз. алгебра и начала анализа. 10-11кл-11 класс_алимов, колягина_2003 ...
78b 1  гдз. алгебра и начала анализа. 10-11кл-11 класс_алимов, колягина_2003 ...78b 1  гдз. алгебра и начала анализа. 10-11кл-11 класс_алимов, колягина_2003 ...
78b 1 гдз. алгебра и начала анализа. 10-11кл-11 класс_алимов, колягина_2003 ...rosgdz
 
гдз по алгебре 9 класс макарычев ю. н. и др
гдз по алгебре 9 класс макарычев ю. н. и дргдз по алгебре 9 класс макарычев ю. н. и др
гдз по алгебре 9 класс макарычев ю. н. и дрYou DZ
 
57b 1 гдз. алгебра и начала анализа 11кл. колмогоров-2002 -221с
57b 1  гдз. алгебра и начала анализа 11кл. колмогоров-2002 -221с57b 1  гдз. алгебра и начала анализа 11кл. колмогоров-2002 -221с
57b 1 гдз. алгебра и начала анализа 11кл. колмогоров-2002 -221сrosgdz
 
Недостатки Python
Недостатки PythonНедостатки Python
Недостатки PythonPython Meetup
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskellhusniyarova
 
алгебра и начала мат. анализа. 10кл. (баз. и проф. ур.) колягин ю.м. и др 201...
алгебра и начала мат. анализа. 10кл. (баз. и проф. ур.) колягин ю.м. и др 201...алгебра и начала мат. анализа. 10кл. (баз. и проф. ур.) колягин ю.м. и др 201...
алгебра и начала мат. анализа. 10кл. (баз. и проф. ур.) колягин ю.м. и др 201...adgjm73458
 
Gdz 11 algebra_sapozhnikov_2001
Gdz 11 algebra_sapozhnikov_2001Gdz 11 algebra_sapozhnikov_2001
Gdz 11 algebra_sapozhnikov_2001Lucky Alex
 

Ähnlich wie Функциональное программирование - Александр Алексеев (20)

аппроксимация функции нескольких переменных
аппроксимация функции нескольких переменныхаппроксимация функции нескольких переменных
аппроксимация функции нескольких переменных
 
01 - Введение в дискретную математику. Теория множеств и комбинаторика
01 - Введение в дискретную математику. Теория множеств и комбинаторика01 - Введение в дискретную математику. Теория множеств и комбинаторика
01 - Введение в дискретную математику. Теория множеств и комбинаторика
 
гдз по алгебре 11 класс алимов ш. а. и др
гдз по алгебре 11 класс алимов ш. а. и дргдз по алгебре 11 класс алимов ш. а. и др
гдз по алгебре 11 класс алимов ш. а. и др
 
1
11
1
 
Андрей Соболевский - Вокруг Базельской задачи: Бернулли, Эйлер, Риман
Андрей Соболевский - Вокруг Базельской задачи: Бернулли, Эйлер, РиманАндрей Соболевский - Вокруг Базельской задачи: Бернулли, Эйлер, Риман
Андрей Соболевский - Вокруг Базельской задачи: Бернулли, Эйлер, Риман
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетов
 
Matemat526
Matemat526Matemat526
Matemat526
 
п.3.1.2 формулы для решения квадратных уравнений
п.3.1.2 формулы для решения квадратных уравненийп.3.1.2 формулы для решения квадратных уравнений
п.3.1.2 формулы для решения квадратных уравнений
 
Scala
ScalaScala
Scala
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
78b 1 гдз. алгебра и начала анализа. 10-11кл-11 класс_алимов, колягина_2003 ...
78b 1  гдз. алгебра и начала анализа. 10-11кл-11 класс_алимов, колягина_2003 ...78b 1  гдз. алгебра и начала анализа. 10-11кл-11 класс_алимов, колягина_2003 ...
78b 1 гдз. алгебра и начала анализа. 10-11кл-11 класс_алимов, колягина_2003 ...
 
Основы NumPy
Основы NumPyОсновы NumPy
Основы NumPy
 
гдз по алгебре 9 класс макарычев ю. н. и др
гдз по алгебре 9 класс макарычев ю. н. и дргдз по алгебре 9 класс макарычев ю. н. и др
гдз по алгебре 9 класс макарычев ю. н. и др
 
57b 1 гдз. алгебра и начала анализа 11кл. колмогоров-2002 -221с
57b 1  гдз. алгебра и начала анализа 11кл. колмогоров-2002 -221с57b 1  гдз. алгебра и начала анализа 11кл. колмогоров-2002 -221с
57b 1 гдз. алгебра и начала анализа 11кл. колмогоров-2002 -221с
 
Недостатки Python
Недостатки PythonНедостатки Python
Недостатки Python
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
 
Iteratee explained.
Iteratee explained.Iteratee explained.
Iteratee explained.
 
10 a k
10 a k10 a k
10 a k
 
алгебра и начала мат. анализа. 10кл. (баз. и проф. ур.) колягин ю.м. и др 201...
алгебра и начала мат. анализа. 10кл. (баз. и проф. ур.) колягин ю.м. и др 201...алгебра и начала мат. анализа. 10кл. (баз. и проф. ур.) колягин ю.м. и др 201...
алгебра и начала мат. анализа. 10кл. (баз. и проф. ур.) колягин ю.м. и др 201...
 
Gdz 11 algebra_sapozhnikov_2001
Gdz 11 algebra_sapozhnikov_2001Gdz 11 algebra_sapozhnikov_2001
Gdz 11 algebra_sapozhnikov_2001
 

Mehr von Aleksander Alekseev

Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)Aleksander Alekseev
 
PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)Aleksander Alekseev
 
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)Aleksander Alekseev
 
In-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several timesIn-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several timesAleksander Alekseev
 
Haskell - это просто - Александр Алексеев
Haskell - это просто - Александр АлексеевHaskell - это просто - Александр Алексеев
Haskell - это просто - Александр АлексеевAleksander Alekseev
 

Mehr von Aleksander Alekseev (9)

Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)
 
PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)
 
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
 
Data recovery using pg_filedump
Data recovery using pg_filedumpData recovery using pg_filedump
Data recovery using pg_filedump
 
Full Text Search in PostgreSQL
Full Text Search in PostgreSQLFull Text Search in PostgreSQL
Full Text Search in PostgreSQL
 
pg_filedump
pg_filedumppg_filedump
pg_filedump
 
Quality Assurance in PostgreSQL
Quality Assurance in PostgreSQLQuality Assurance in PostgreSQL
Quality Assurance in PostgreSQL
 
In-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several timesIn-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several times
 
Haskell - это просто - Александр Алексеев
Haskell - это просто - Александр АлексеевHaskell - это просто - Александр Алексеев
Haskell - это просто - Александр Алексеев
 

Функциональное программирование - Александр Алексеев