Язык F# для чайников. Урок 5. Теория функционального программирования. |
Автор megabax | ||||
31.03.2013 г. | ||||
Язык F# для чайников. Урок 5. Теория функционального программирования.Это последний урок из серии "Язык F# для чайников", публикуемый в бесплатном разделе. Начиная со следующего, публикация уроков будет продолжена в платном разделе. В бесплатном же разделе возможно иногда будут публиковать некоторые статьи, посвященные методике программирования на F#. И так, мы четыре урока посвятили некоторой практике работы с F#. Теперь углубимся в теорию - настала пора узнать, для чего все таки нам нужно функциональное программирование. И так, F# - это функциональный язык программирования, поддерживающий так же императивное программирование и ООП. Функциональное программирование объединяет разные подходы к определению процессов вычисления на основе достаточно строгих абстрактных понятий и методов символьной обработки данных. Вообще, функциональное программирование - это совсем другая парадигма программирования, основанная исключительно на функциях. В нем нет переменных, не может возникнуть побочных эффектов. В функциональном программировании можно писать более короткие программы, так как данный подход позволяет выражать свои мысли короче. В императивном программировании мы можем записать вот такую конструкцию:
С точки зрения императивного программирования тут все верно - мы увеличиваем значение переменной X на единицу. А вот любой математик скажет нам, что так быть не может. И будет прав, с точки зрения математики действительно X не может быть равно числу X, увеличенному на единицу. Суть функционального программирования как раз и заключатся в том, что бы писать программу не с точки зрения кодирования алгоритма, а именно с точки зрения математики. Чем этот подход лучше императивного принципа программирования? При традиционном подходе разработка программы делается в три шага:
При функциональном программировании мы можем математическую модель сразу же кодировать на языке программирования, опустив при этом такой трудоемкий шаг, как разработка алгоритма. На урок 2 мы уже познакомились с понятием функций и функциональным программированием. Сегодня мы узнаем еще об одном понятии функционального программирования - лямбда выражении. Лямбда выражение - это константа функционального типа. Вот пример использования лямбда выражений:
Данная программа выдаст результат: 10. А теперь, для демонстрации образа функционального мышления, рассмотрим решение квадратного уравнения в общем виде средствами языка F#:
По сути, если перевести эту программу на русский язык, то мы получим примерно следующее рассуждение: 1. Зададим функцию ввода числа с клавиатуры: Вводим данные с клавиатуры, при вводе числа запоминаем, если это не число, то вводим число с клавиатуры (обратите внимание на рекурсию). 2. Используя функцию ввода числа с клавиатуры, вводим поочередно a, b и c. 3. Задами функцию решения уравнения: "Дискриминант вычисляется по формуле, D=b^2-4fc. Если a=0 то это линейное уравнение и оно имеет один корень -c/b, иначе если D<0 решений нет, иначе это квадратное уравнения с двумя корнями -b+sqrt(D))/(2a) и -b-sqrt(D))/(2*a)" 4. Решим уравнения используя заданную формулу. 5. Выведем результат: если решений нет то сообщить "Решений нет", если это линейное уравнение то вывести одно число, иначе выводим оба числа. |
Пред. » |
---|