Функциональное программирование
DESCRIPTION
Функциональное программирование. Факультет инноваций и высоких технологий Московский физико-технический институт. Лекция 7. Пример: построение графика 2D-функции. Пример: построение графика функции. plot (-4.0,4.0) (-1.0,1.0) sin;; Масштабирование:. (* from int to float range *) - PowerPoint PPT PresentationTRANSCRIPT
Сошников Дмитрий Валерьевич
к.ф.-м.н., доцент[email protected]
Факультет инноваций и высоких технологий
Московский физико-технический институт
Лекция 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