Разделы презентаций


Обзор концепций и языков функционального программирования

Содержание

Традиционное представление о функциональном программировании(defun fibonacci (N) "Compute the N'th Fibonacci number." (if (or (zerop N) (= N 1)) 1 (+ (fibonacci (- N 1)) (fibonacci (- N

Слайды и текст этой презентации

Слайд 1Обзор концепций и языков функционального программирования
Постаногов Игорь
Пермь, 2015

Обзор концепций и языков функционального программированияПостаногов ИгорьПермь, 2015

Слайд 2Традиционное представление о функциональном программировании
(defun fibonacci (N)
"Compute the N'th

Fibonacci number."
(if (or (zerop N) (= N 1))

1
(+ (fibonacci (- N 1)) (fibonacci (- N 2)))))
Традиционное представление о функциональном программировании(defun fibonacci (N)

Слайд 3Семантика LISP’a
Объектно-ориентированная парадигма
Функциональная парадигма
Процедурная парадигма

Семантика LISP’aОбъектно-ориентированная парадигмаФункциональная парадигмаПроцедурная парадигма

Слайд 4Классификация языков программирования

Классификация  языков программирования

Слайд 5Концепции ФП
Функции высших порядков
Чистые функции
Рекурсия
Ленивые вычисления
Алгебраические типы данных + сопоставление

с образцом

Концепции ФПФункции высших порядковЧистые функцииРекурсияЛенивые вычисленияАлгебраические типы данных + сопоставление с образцом

Слайд 6Функции высших порядков
Трактование функций как значений
Над функциями можно проводить операции
Их

можно комбинировать


func map(List, func: A → B) → List
func filter(List,

func: A → bool) → List

func filter’N’map(List
, func: A → B, func: A → bool) → List = map(filter(List, A → bool), A → B)


Слайд 7Функции высших порядков
Трактование функций как значений
Над функциями можно проводить операции
Их

можно комбинировать

Преимущества:
Создание переиспользуемых модулей
У объектов в ООП с этим проблемы
Оптимизация

Функции высших порядковТрактование функций как значенийНад функциями можно проводить операцииИх можно комбинироватьПреимущества:Создание переиспользуемых модулейУ объектов в ООП

Слайд 8Чистые функции
Результат вычисления функции зависит только от аргументов


Преимущества:
Возможность возврата ранее

посчитанного значения без пересчёта
Возможность перезапуска вычисления в случае аппаратного сбоя
В

том числе на другом вычислительном узле

Чистые функцииРезультат вычисления функции зависит только от аргументовПреимущества:Возможность возврата ранее посчитанного значения без пересчётаВозможность перезапуска вычисления в

Слайд 9Рекурсия
Решение задачи через саму себя, но с более простыми условиями


Преимущества:
Порой

проще и нагляднее
Меньшее количество присваиваний
Автоматическая оптимизация хвостовой рекурсии к итерации

РекурсияРешение задачи через саму себя, но с более простыми условиямиПреимущества:Порой проще и нагляднееМеньшее количество присваиванийАвтоматическая оптимизация хвостовой

Слайд 10Ленивые вычисления
Выполнение вычислений только при первом непосредственном использовании результата

List allFriendsFriends

= null
if (friendsFriendsCountRequired) {
allFriendsFriends = consumingFunc()
print(allFriendsFriends.count)
}
if (friendsFriendsPrintRequired) {
if (allFriendsFriends ==

null)
allFriendsFriends = consumingFunc()
printAll(allFriendsFriends)
}
Ленивые вычисленияВыполнение вычислений только при первом непосредственном использовании результатаList allFriendsFriends = nullif (friendsFriendsCountRequired) {	allFriendsFriends = consumingFunc()	print(allFriendsFriends.count)}if (friendsFriendsPrintRequired)

Слайд 11Ленивые вычисления
Выполнение вычислений только при первом непосредственном использовании результата

lazy List

allFriendsFriends = consumingFunc()
if (friendsFriendsCountRequired) { print(allFriendsFriends.count)
}
if (friendsFriendsPrintRequired) { printAll(allFriendsFriends)
}

Ленивые вычисленияВыполнение вычислений только при первом непосредственном использовании результатаlazy List allFriendsFriends = consumingFunc()if (friendsFriendsCountRequired) {	print(allFriendsFriends.count)}if (friendsFriendsPrintRequired) {	printAll(allFriendsFriends)}

Слайд 12Ленивые вычисления
Выполнение вычислений только при первом непосредственном использовании результата


Преимущества:
Отделение вычислений

от логики вывода
Упрощение структуры кода
Возможность организации бесконечных структур данных
Фибоначчи fibs

= 0 : 1 : zipWith (+) fibs (tail fibs)




Ленивые вычисленияВыполнение вычислений только при первом непосредственном использовании результатаПреимущества:Отделение вычислений от логики выводаУпрощение структуры кодаВозможность организации бесконечных

Слайд 13Сопоставление с образцом
Использование типов, адекватных предметной области, и упрощённое их

сопоставление

case class Address(street: String, number: Int)
case class Person(name: String, age:

Int, address: Address)

List namesOfPeopleOnBukireva =
people.map(person match case Person(name, _, Address(‘Букирева’, _)) => name
case _ =>
)

Сопоставление с образцомИспользование типов, адекватных предметной области, и упрощённое их сопоставлениеcase class Address(street: String, number: Int)case class

Слайд 14Сопоставление с образцом
Использование типов, адекватных предметной области, и упрощённое их

сопоставление


Преимущества:
Повышение читаемости кода
Адекватность задачам обработки данных
Простота конвертации в JSON, XML

Сопоставление с образцомИспользование типов, адекватных предметной области, и упрощённое их сопоставлениеПреимущества:Повышение читаемости кодаАдекватность задачам обработки данныхПростота конвертации

Слайд 15Языки с функциональной парадигмой
Haskell
Erlang
F#
Scala

Языки с функциональной парадигмойHaskellErlangF#Scala

Слайд 16Haskell
https://www.haskell.org/
Разработан сообществом
Чистый функциональный язык программирования
Преподаётся в университетах
Университет Эдинбурга
ИТМО
Используется в

коммерческой среде
Финансовая аналитика
Разработка электроники

Haskellhttps://www.haskell.org/Разработан сообществомЧистый функциональный язык программированияПреподаётся в университетахУниверситет Эдинбурга ИТМОИспользуется в коммерческой средеФинансовая аналитикаРазработка электроники

Слайд 17Erlang
http://www.erlang.org/
Разработан компанией Ericsson
Функциональный ЯП для распределённых систем
Используется в коммерческой

среде
Телекоммуникационные системы
Back-end для чата
NoSQL БД (язык реализации)

Erlanghttp://www.erlang.org/ Разработан компанией EricssonФункциональный ЯП для распределённых системИспользуется в коммерческой средеТелекоммуникационные системыBack-end для чатаNoSQL БД (язык реализации)

Слайд 18F#
http://fsharp.org/
Разработан компанией Microsoft
Объектно-функциональный ЯП
OCaml поверх .NET

F#http://fsharp.org/Разработан компанией MicrosoftОбъектно-функциональный ЯПOCaml поверх .NET

Слайд 19Scala
http://scala-lang.org/
Разработан в университете Лозанны (EPFL)
Объектно-функциональный ЯП
Компилируется в Java-байткод

Scalahttp://scala-lang.org/Разработан в университете Лозанны (EPFL)Объектно-функциональный ЯПКомпилируется в Java-байткод

Слайд 20Тренды
Аналитика Больших Данных
Распределённые системы

ТрендыАналитика Больших ДанныхРаспределённые системы

Слайд 21Большие данные
Что?
Серия подходов, инструментов и методов обработки структурированных и неструктурированных

данных огромных объёмов и значительного многообразия
При каких условиях?
Непрерывный прирост данных
Распределение

по многочисленным узлам вычислительной сети
Большие данныеЧто?Серия подходов, инструментов и методов обработки структурированных и неструктурированных данных огромных объёмов и значительного многообразияПри каких

Слайд 22Средства для анализа Big Data
MapReduce
Стек Apache Spark
Spark
Spark Streaming
Spark SQL
MLlib

Средства для анализа  Big DataMapReduceСтек Apache SparkSparkSpark StreamingSpark SQLMLlib

Слайд 23Resilient Distributed Datasets в Spark

Resilient Distributed Datasets в Spark

Слайд 24Распределённые системы
Модель акторов
Автономные вычислительные процессы
Коммуникация только посредством сообщений

Преимущества:
Масштабируемость
Отказоустойчивость (перезапуск)

Реализация -

Akka

Распределённые системыМодель акторовАвтономные вычислительные процессыКоммуникация только посредством сообщенийПреимущества:МасштабируемостьОтказоустойчивость (перезапуск)Реализация - Akka

Слайд 25Что дальше?
Introduction to Functional Programming, edX
Functional Programming Principles in Scala,

Coursera
Learn you some Erlang
Learn You a Haskell for Great Good!

Что дальше?Introduction to Functional Programming, edXFunctional Programming Principles in Scala, CourseraLearn you some ErlangLearn You a Haskell

Слайд 26Контакты
Школа функционального программирования (г. Пермь)
https://vk.com/tryfuture
Игорь Постаногов
ipostanogov@outlook.com
https://vk.com/ipostanogov



КонтактыШкола функционального программирования (г. Пермь)https://vk.com/tryfuture  Игорь Постаногов ipostanogov@outlook.com https://vk.com/ipostanogov

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика