.
Язык F# для чайников. Урок 2. Основы функционального программирования.
Автор megabax   
04.02.2013 г.
New Page 1

Язык F# для чайников. Урок 2. Основы функционального программирования.

На прошлом уроке мы написали свою первую программу "Hello, world!". Теперь давайте попробуем что-нибудь сосчитать, ну хотя бы дважды два:

let a=2*2;

System.Console.WriteLine(a);

System.Console.Read();

 

Запустив эту программу, мы увидим результат:

Язык F# для чайников. Урок 2. Основы функционального программирования.

 

А теперь более подробно про оператор let. Это не просто присваивание, с помощью этого оператора мы можем задать формулы. Вот так, например, будет выглядеть решение квадратного уравнения 2x2+3x-4=0 на F#:

 

let a,b,c=2.0, 3.0, -4.0;

let D=b*b-4.0*a*c;

let x1,x2=((-b+sqrt(D))/(2.0*a)),((-b-sqrt(D)/(2.0*a)));

System.Console.WriteLine(x1);

System.Console.WriteLine(x2);

System.Console.Read();

 

И вот результат работы этой программы:

Язык F# для чайников. Урок 2. Основы функционального программирования.

 

Если вы изучали другие языки программирования, то наверняка знаете, что во многих программах используются функции. Это очень удобно в тех случаях, когда на надо много раз использовать один и тот же кусок кода, но с разными исходными данными. Функции есть и в F#. Вот как будет выглядеть наша программа решения квадратного уравнения с использованием функции:

//задаем функцию

let square_eq_solve(a,b,c)=

    let D=b*b-4.0*a*c in

        ((-b+sqrt(D))/(2.0*a)),((-b-sqrt(D)/(2.0*a)));

 

//вычисляем с использованием функции

let x1,x2=square_eq_solve(2.0, 3.0, -4.0);

System.Console.WriteLine(x1);

System.Console.WriteLine(x2);

System.Console.Read();

 

Продемонстрирую возможность использования функций для решения множества однотипных задач. Сейчас мы решим не одно, а сразу три квадратных уравнения:

//задаем функцию

let square_eq_solve(a,b,c)=

    let D=b*b-4.0*a*c in

        ((-b+sqrt(D))/(2.0*a)),((-b-sqrt(D)/(2.0*a)));

 

//первое уравнение

System.Console.WriteLine(square_eq_solve(2.0, 5.0, -4.0));

 

//второе уравнение

System.Console.WriteLine(square_eq_solve(2.0, 11.0, -4.0));

 

//третье уравнение

System.Console.WriteLine(square_eq_solve(2.0, 3.0, 4.0));

 

System.Console.Read();

 

А вот результат работы данной программы:

Язык F# для чайников. Урок 2. Основы функционального программирования.

 

И в заключении познакомимся со списками. Предыдущий пример мы можем записать и в таком виде:

 

//задаем функцию

let square_eq_solve(a,b,c)=

    let D=b*b-4.0*a*c in

        [((-b+sqrt(D))/(2.0*a)),((-b-sqrt(D)/(2.0*a)))];

 

//первое уравнение

System.Console.WriteLine(square_eq_solve(2.0, 5.0, -4.0));

 

//второе уравнение

System.Console.WriteLine(square_eq_solve(2.0, 11.0, -4.0));

 

//третье уравнение

System.Console.WriteLine(square_eq_solve(2.0, 3.0, 4.0));

 

System.Console.Read();

 

Тогда программа выдаст нам вот это:

 

Язык F# для чайников. Урок 2. Основы функционального программирования.

 

Казалось бы, в чем разница? Разница в типах возвращаемых значений. В первом случае это был порядочный кортеж, во втором - список. Но о типах значений мы поговорим немного позже.

Последнее обновление ( 04.02.2013 г. )