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

9
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент [email protected] Факультет инноваций и высоких технологий Московский физико-технический институт

Upload: armen

Post on 20-Mar-2016

62 views

Category:

Documents


3 download

DESCRIPTION

Функциональное программирование. Факультет инноваций и высоких технологий Московский физико-технический институт. Лекция 7. Пример: построение графика 2D-функции. Пример: построение графика функции. plot (-4.0,4.0) (-1.0,1.0) sin;; Масштабирование:. (* from int to float range *) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Функциональное программирование

Сошников Дмитрий Валерьевич

к.ф.-м.н., доцент[email protected]

Факультет инноваций и высоких технологий

Московский физико-технический институт

Page 2: Функциональное программирование

Лекция 7

Пример: построение графика 2D-функции

Page 3: Функциональное программирование

3

©20

08 С

ошни

ков

Д.В

.

plot (-4.0,4.0) (-1.0,1.0) sin;;

Масштабирование:(* from int to float range *)let scale (a:float,b:float) (i,j) x =

float(x-i)/float(j-i)*(b-a)+a;;

(* from float range to int *)let uscale (i,j) (a:float,b:float) (f:float) = int((f-a)/(b-a)*float(j-i))+i;;

Page 4: Функциональное программирование

4

©20

08 С

ошни

ков

Д.В

.

#lightopen System;let xrange = (0,50);;let yrange = (0,15);;let plot xdim ydim f = for i=fst yrange to snd yrange do for j=fst xrange to snd xrange do let x = scale xdim xrange j let y = uscale yrange ydim (f x) Console.Write(if y=i then "*" else ".") Console.WriteLine("");;plot (-4.0,4.0) (-1.0,1.0) sin;;

Page 5: Функциональное программирование

5

©20

08 С

ошни

ков

Д.В

.

let plot1 xdim f = let ydim = fora (fst xrange) (snd yrange) (100.0,-100.0) (fun (xmin,xmax) i -> let x = scale xdim xrange i (min xmin (f x),max xmax (f x)) ) in for i=fst yrange to snd yrange do for j=fst xrange to snd xrange do let x = scale xdim xrange j let y = uscale yrange ydim (f x) // printf "i=%d, j=%d, x=%f, y=%f\n" i j x y Console.Write(if y=i then "*" else ".") Console.WriteLine("");;plot1 (-4.0,4.0) sin;;

Page 6: Функциональное программирование

6

©20

08 С

ошни

ков

Д.В

.

type out_device = int*(int*int -> unit);;

let plotgen xdim f dev = let (n,dfun) = dev let ydim = fora 0 n (100.0,-100.0) (fun (xmin,xmax) i -> let x = scale xdim xrange i (min xmin (f x),max xmax (f x))) for i=0 to n-1 do for j=0 to n-1 do let x = scale xdim (0,n-1) j let y = uscale (0,n-1) ydim (f x) if y=i then dfun (j,y);;

Page 7: Функциональное программирование

7

©20

08 С

ошни

ков

Д.В

.

open System.Drawing;;let implot xdim f = let img = new Bitmap(400,400) plotgen xdim f (400, fun (x,y) -> img.SetPixel(x,y,Color.Black)) img.Save(@"c:\image.bmp");;

implot (-4.0,4.0) sin;;

Page 8: Функциональное программирование

8

©20

08 С

ошни

ков

Д.В

.

Функциональное программирование – эффективный способ решения задач, характеризующийся отсуствием побочных эффектов, функциональной декомпозицией задачи и высоким уровнем функциональной абстракции

Язык программирования F# сочетает в себе все достоинства функционального программирования с возможностями .NET Framework, что позволяет создавать весьма компактные решения достаточно нетривиальных задач

F# по ощущениям (краткость конструкций, интерпретирующий режим) похож на динамический язык (python), но на самом деле это язык со строгой типизацией!

Page 9: Функциональное программирование

9