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

Post on 20-Mar-2016

62 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

к.ф.-м.н., доцентdmitryso@microsoft.com

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

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

Лекция 7

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

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;;

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;;

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;;

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);;

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;;

8

©20

08 С

ошни

ков

Д.В

.

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

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

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

9

top related