Слайд 2
Лекция 4
Функциональное программирование в реальной жизни
Слайд 4
Определение
zn+1(c)= zn2(c)+c, z0(c)=0; z ∈C
M = { c
∈ C | lim zn(c)
| |z20(0)|<1 }
Слайд 5
Реализация F#
let mandelf (c:Complex) (z:Complex) = z*z+c;;
let ismandel
c = Complex.Abs(repeatN 20 (mandelf c) (Complex.zero))
a b f =
if a>=b then f(b)
else
begin f(a); forl (a+1) b f end ;;
let scale (x:float,y:float) (u,v) n = float(n-u)/float(v-u)*(y-x)+x;;
forl 1 60 (fun i ->
forl 1 60 (fun j ->
let lscale = scale (-1.2,1.2) (1,60) in
let t = complex (lscale j) (lscale i) in
Console.Write(if ismandel t then "*" else " ")
);
Console.WriteLine("")
);;
Слайд 6
WinForms
#light
open System.Drawing
open System.Windows.Forms
let form =
let image
= new Bitmap(400, 400)
let lscale = scale
(-1.0,1.0) (0,400)
forl 0 (image.Height-1) (fun i ->
forl 0 (image.Width-1) (fun j ->
let t = complex (lscale i) (lscale j) in
image.SetPixel(i,j,if ismandel t then Color.Black else Color.White)
))
let temp = new Form()
temp.Paint.Add(fun e -> e.Graphics.DrawImage(image, 0, 0))
temp
[]
do Application.Run(form);;
Слайд 8
Где сейчас используется ФП?
Mainstream языки программирования:
C# 3.0, следующий
стандарт C++
Java.next (Clojure, Groovy, JRuby, Scala)
LINQ
XSLT
Excel Spreadsheets
Слайд 9
ФП в реальных проектах
Autocad
emacs (LISP)
HeVeA
Проекты в рамках Microsoft
и MSR
F# Compiler
Driver code verification
AdCenter Challenge
Слайд 10
Cash-cow of Search
Selling “web space” at www.live.comSelling “web
space” at www.live.com and www.msn.com.
“Paid Search” (prices by
auctions)
The internal competition focuses on Paid Search.
The adCenter Challenge
Слайд 11
Внутреннее соревнование
4 месяца на программирование
1 месяц на обучение
Задача:
На
основе обучающих данных за несколько недель (просмотры страниц) предсказывать
вероятность перехода по ссылке
Ресурсы:
4 (2 x 2) 64-bit CPU machine
16 Гб ОП
200 Гб НЖМД
Слайд 12
Масштаб проблемы
Объем входных данных
7,000,000,000 записые, 6 терабайт
Время ЦП
на обучение:
2 недели × 7 дней × 86,400
сек/день =
1,209,600 секунд
Требования к алгоритму обучения:
5,787 записей / сек
172.8 μs на одну запись
Слайд 13
Решение
4 недели кодирования, 4 эксперта в области Machine
Learning
100 миллионов вероятностных переменных
Обработано 6 терабайт обучающих данных
Обработка в
реальном времени!
Слайд 15
Какие задачи хорошо решаются на функциональных языках?
Обработка данных
Синтаксический
разбор
Компиляторы, преобразования программ
Data Mining
Традиционное мнение: плохо решаются UI-задачи
Смотрим пример!
Слайд 16
Особенности ФП
Отсутствие операторов присваивания и побочных эффектов
Функции-как-данные –
между функциями и данными не делается явного различия, в
чистом ФП «все есть функция»
Декларативное программирование
Высокая функциональная абстракция
Более короткий и выразительный код
За счет автоматического вывода типов
За счет отсутствия операторов присваивания
Прозрачная семантика, близость к математическому понятию функции
Возможность рассуждать о программах, доказывать их свойства
Слайд 18
Что будем изучать
Принципы функционального программирования
Математическая теория в основе
функционального программирования – λ-исчисление
Семантика функциональных языков, вопросы реализации
Языки функционального
программирования:
Базовый язык - F#
Семейство ML-языков: OCaml, Caml Light, ML, SML
Другие похожие языки: Haskell, Hope, …
Классика ФП – LISP
Примеры на C#, XSLT, …
Слайд 19
Что нас ждет?
Лекции – 14 шт. (по 2
шт. раз в 2 недели)
Интерактивные занятия – 2 шт.
Доклады
Обсуждения
Семинары
по подгруппам, по 1 паре, раз в 2 недели
Лабораторные работы (6-8 шт.)
выполняются дома самостоятельно
http://functional.soshnikov.com
Слайд 20
Критерии оценки
Экзамен (письменный, 5 вопросов) – 50%
Лабораторные работы
– 25% - ОБЯЗАТЕЛЬНОЕ!
Самостоятельная работа (доклады, выступления на семинарах,
вопросы, дополнительная работа) – 25%
5 – 75%
4 – 60%
3 – 50%
Слайд 21
Варианты самостоятельной работы
Научно-исследовательская работа
Выполнение полу-исследовательского проекта
Выступление с докладом
(15-20 мин.)
Функциональное программирование в реальном мире
Разбор масштабного примера (Fractal-3D,
график функции)
Обзор библиотеки / fsharp samples
Обзор языка функционального программирования
Функционально-стековый язык catl