Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Обзор курса
Олег Смирнов[email protected]
УНК “ИПСА” НТУУ “КПИ”
16 сентября 2011 г.
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 1 / 23
Программа на сегодня
Вводная лекция и обзор курса
Первая лекция – язык F#; порядок применения функции
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 2 / 23
Немного об авторе
1999-2005: Факультет прикладной математики КПИ
2003-2005: x86 Asm, C; reverse engineering, системноепрограммирование
2005-2009: C++, Perl, Python; распределённые системы, сетевыепротоколы
2009-2010: Системы поддержки операций; курс алгоритмов вGlobal Logic
2011-сейчас: Erlang, Ocaml; высоконагруженные системы,социальные сервисы
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 3 / 23
Языки программирования
Java
C/C++
Python
Ruby
JavaScript
...?
Lisp / Scheme
SML / Ocaml / F#
Scala
Haskell
Eiffel
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 4 / 23
“Функциональщина” глазами обычного программиста
q a b c = putStrLn $ b ++ [ toEnum 10 , ’ q ’ , ’ ( ’ ] ++ show b++ [ ’ , ’ ] ++ show c ++ [ ’ , ’ ] ++ show a ++ [ ’ ) ’ ]
main = q "q␣a␣b␣c␣=␣ putSt rLn ␣$␣b␣++␣ [ toEnum␣ 10 , ’ q ’ , ’ ( ’ ] ␣""␣show␣b␣++␣ [ ’ , ’ ] ␣++␣show␣c␣++␣ [ ’ , ’ ] ␣++␣show␣a␣++␣ [ ’ ) ’ ] "" de f ␣q ( a , b , c ) : p r i n t ␣b+chr (10)+ ’q( ’+ r e p r ( b)+ ’ , ’+ r e p r ( c)+"" ’ , ’+ r e p r ( a )+ ’) ’ ␣ de f ␣e ( x ) ␣ r e t u r n ␣ 34 . ch r+x+34. chr ␣ end ; "" de f ␣q ( a , b , c ) ␣ p r i n t ␣b+10. chr+’main=q␣ ’+e (b)+ ’␣ ’+e ( c )+ ’␣ ’ ""+e ( a )+ ’␣ ’+10. chr ␣ end"
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 5 / 23
“Функциональщина” глазами обычного программиста
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 6 / 23
Цели курса
1 Практика функционального программирования
2 Изучение новой парадигмы
3 Приёмы функционального программирования
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 7 / 23
Практика функционального программирования
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 8 / 23
Цели курса
1 Практика функционального программирования
2 Изучение новой парадигмы
3 Приёмы функционального программирования
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 9 / 23
Изучение новой парадигмы
pub l i c i n t f a c t ( i n t n ){
i n t f = 1 ;f o r ( i n t i = 2 ; i <= n ; i++){
f = f ∗ i ;}r e turn f ;
}
l e t rec f a c t n =match n with
| 0 −> 1| _ −> n ∗ f a c t ( n − 1 ) ; ;
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 10 / 23
Изучение новой парадигмы
Неизменяемое состояние – меньше ошибок, чище код
Верификация – доказываем программы как теоремы
Параллелизм – технология Google MapReduce и Apache Hadoop
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 11 / 23
Изучение новой парадигмы
Неизменяемое состояние – меньше ошибок, чище код
Верификация – доказываем программы как теоремы
Параллелизм – технология Google MapReduce и Apache Hadoop
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 11 / 23
Изучение новой парадигмы
Неизменяемое состояние – меньше ошибок, чище код
Верификация – доказываем программы как теоремы
Параллелизм – технология Google MapReduce и Apache Hadoop
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 11 / 23
Параллелизм
Jeffrey Dean and Sanjay Ghemawat. 2004. MapReduce: simplified data processingon large clusters. In Proceedings of the 6th conference on Symposium on
Opearting Systems Design & Implementation - Volume 6 (OSDI’04), Vol. 6.USENIX Association, Berkeley, CA, USA, 10-10.
Mike Cafarella and Doug Cutting. 2004. Building Nutch: Open Source Search.Queue 2, 2 (April 2004), 54-61.
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 12 / 23
Цели курса
1 Практика функционального программирования
2 Изучение новой парадигмы
3 Приёмы функционального программирования
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 13 / 23
Приёмы функционального программирования
Сборка мусора: появилась в LISP (1958), стала мэйнстримом в1995 (Java)
Замыкания: появились в Scheme (1975), стали мэйнстримом в2000-х (C#, JavaScript)
Ленивая обработка: появилась в Miranda (1985), сталамэйнстримом в 2000-е (LINQ)
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 14 / 23
Приёмы функционального программирования
Сборка мусора: появилась в LISP (1958), стала мэйнстримом в1995 (Java)
Замыкания: появились в Scheme (1975), стали мэйнстримом в2000-х (C#, JavaScript)
Ленивая обработка: появилась в Miranda (1985), сталамэйнстримом в 2000-е (LINQ)
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 14 / 23
Приёмы функционального программирования
Сборка мусора: появилась в LISP (1958), стала мэйнстримом в1995 (Java)
Замыкания: появились в Scheme (1975), стали мэйнстримом в2000-х (C#, JavaScript)
Ленивая обработка: появилась в Miranda (1985), сталамэйнстримом в 2000-е (LINQ)
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 14 / 23
Приёмы функционального программирования
Параметрический полиморфизм: появился в 1983, сейчасмэйнстрим в Java, C#, C++
Функции высшего порядка: появились в LISP, сейчас мэйнстримвезде, кроме Java
Вывод типов: появился в ML (1979), стал мэйнстримом в 2007(C#, Scala, C++0x)
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 15 / 23
Приёмы функционального программирования
Параметрический полиморфизм: появился в 1983, сейчасмэйнстрим в Java, C#, C++
Функции высшего порядка: появились в LISP, сейчас мэйнстримвезде, кроме Java
Вывод типов: появился в ML (1979), стал мэйнстримом в 2007(C#, Scala, C++0x)
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 15 / 23
Приёмы функционального программирования
Параметрический полиморфизм: появился в 1983, сейчасмэйнстрим в Java, C#, C++
Функции высшего порядка: появились в LISP, сейчас мэйнстримвезде, кроме Java
Вывод типов: появился в ML (1979), стал мэйнстримом в 2007(C#, Scala, C++0x)
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 15 / 23
Программа курса: первый семестр
Язык F#
Азы: рекурсия, функции высших порядков, замыкания,алгебраические типы данных
Практика: простые алгоритмы и структуры данных, парсинг
Параллельное программирование: свёртки, пробеги и технологияMapReduce
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 16 / 23
Программа курса: первый семестр
Язык F#
Азы: рекурсия, функции высших порядков, замыкания,алгебраические типы данных
Практика: простые алгоритмы и структуры данных, парсинг
Параллельное программирование: свёртки, пробеги и технологияMapReduce
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 16 / 23
Программа курса: первый семестр
Язык F#
Азы: рекурсия, функции высших порядков, замыкания,алгебраические типы данных
Практика: простые алгоритмы и структуры данных, парсинг
Параллельное программирование: свёртки, пробеги и технологияMapReduce
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 16 / 23
Программа курса: первый семестр
Язык F#
Азы: рекурсия, функции высших порядков, замыкания,алгебраические типы данных
Практика: простые алгоритмы и структуры данных, парсинг
Параллельное программирование: свёртки, пробеги и технологияMapReduce
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 16 / 23
Программа курса: второй семестр
Язык Haskell
Чисто функциональные структуры данных и персистентность
Программирование с монадами
Классы типов
Математические основы ФП и начало теории типов
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23
Программа курса: второй семестр
Язык Haskell
Чисто функциональные структуры данных и персистентность
Программирование с монадами
Классы типов
Математические основы ФП и начало теории типов
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23
Программа курса: второй семестр
Язык Haskell
Чисто функциональные структуры данных и персистентность
Программирование с монадами
Классы типов
Математические основы ФП и начало теории типов
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23
Программа курса: второй семестр
Язык Haskell
Чисто функциональные структуры данных и персистентность
Программирование с монадами
Классы типов
Математические основы ФП и начало теории типов
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23
Программа курса: второй семестр
Язык Haskell
Чисто функциональные структуры данных и персистентность
Программирование с монадами
Классы типов
Математические основы ФП и начало теории типов
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23
Пререквизиты курса
Программирование и алгоритмические языки
Дискретная математика
Математическая логика и теория алгоритмов
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 18 / 23
Administrativia
Два семестра по шестнадцать лекций
Восемь лабораторных, две контрольные и два экзамена
Лекции по пятницам на пятой паре (16:10) в аудитории 02-13
Два лектора плюс гостевые лекции
Программа курса: http://goo.gl/RnbdH
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 19 / 23
Administrativia
Два семестра по шестнадцать лекций
Восемь лабораторных, две контрольные и два экзамена
Лекции по пятницам на пятой паре (16:10) в аудитории 02-13
Два лектора плюс гостевые лекции
Программа курса: http://goo.gl/RnbdH
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 19 / 23
Administrativia
Два семестра по шестнадцать лекций
Восемь лабораторных, две контрольные и два экзамена
Лекции по пятницам на пятой паре (16:10) в аудитории 02-13
Два лектора плюс гостевые лекции
Программа курса: http://goo.gl/RnbdH
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 19 / 23
Administrativia
Два семестра по шестнадцать лекций
Восемь лабораторных, две контрольные и два экзамена
Лекции по пятницам на пятой паре (16:10) в аудитории 02-13
Два лектора плюс гостевые лекции
Программа курса: http://goo.gl/RnbdH
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 19 / 23
Учебники
Харольд Абельсон, Джеральд ДжейСассман “Структура и интерпретация
компьютерных программ”
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 20 / 23
Учебники
Томаш Петричек, Джон Скит“Functional Programming for the Real
World”Дон Сайм “Expert F# 2.0”
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 21 / 23
Рекомендуемая литература
Журнал “Практика функционального программирования”, http://fprog.ru
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 22 / 23
Вопросы?
Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 23 / 23