Автор работы: Пользователь скрыл имя, 18 Ноября 2013 в 19:25, реферат
Одно из значительных мест в исследованиях по теоретическому программированию занимает функциональное программирование. Ведущиеся в течение уже трех десятилетий разработки в этой области в последнее время имеют устойчивую тенденцию к расширению. Выполнение программы на функциональном языке, говоря неформально, заключается в вызове функции, аргументами которой являются значения других функций, которые в свою очередь также могут быть суперпозициями в общем случае произвольной глубины. С точки зрения программиста, основная часть программы состоит из совокупности определений функций, как правило, рекурсивных.
ВВЕДЕНИЕ 3
1 Функциональное программирование 4
1.1 История функционального программирования 4
1.2 Свойства функциональных языков 7
1.3 Задачи, решаемые в функциональном программировании 12
2 Язык F# 13
2.1 Состав инсталляционных пакетов F# 14
2.2 Основные возможности языка 15
2.3 Библиотеки F# 17
2.4 Основные понятия языка F# 17
2.4.1 Выражения 17
2.4.2 Типы 18
2.4.3 Декларации 19
2.4.4 Проверка и вывод типов 20
2.4.5 Функции 21
2.4.6 Функциональный тип 21
2.5 Работа в F# 23
2.5.1 Примеры кода 23
2.5.2 Пример – построение множества Мандельброта 26
ЗАКЛЮЧЕНИЕ 31
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ 32
Очень часто строгие языки включают в себя средства поддержки некоторых полезных возможностей, присущих нестрогим языкам, например бесконечных списков. В поставке Standard ML присутствует специальный модуль для поддержки отложенных вычислений. А Objective Caml помимо этого поддерживает дополнительное зарезервированное слово lazy и конструкцию для списков значений, вычисляемых по необходимости [4].
В качестве задач, традиционно рассматриваемых в курсе функционального программирования, можно выделить следующие:
1. Получение остаточной
Если даны следующие объекты:
P (x1, x2, ..., xn) — некоторая процедура.
x1 = a1, x2 = a2 — известные значения параметров.
x3, ..., xn — неизвестные значения параметров.
Требуется получить остаточную процедуру P1 (x3, ..., xn). Эта задача решается только на узком классе программ.
2. Построение математического
Пусть имеется программа P. Для неё определены входные значения <x1, ..., xn> и выходные значения <y1, ..., ym>. Требуется построить математическое описание функции f : Dx1 . ... . Dxn → Dy1 . ... . Dym.
3. Определение формальной
4. Описание динамических
5. Автоматическое построение «
6. Доказательство наличия
7. Эквивалентная трансформация программ [5]
Все эти задачи достаточно легко решаются средствами функционального программирования, но практически неразрешимы в императивных языках.
F# — это мультипарадигменный
язык программирования, разработанный
в подразделении Microsoft Research и предназначенный
для исполнения на платформе
Microsoft .NET. Он сочетает в себе
выразительность
История F# началась в 2002 году, когда
команда разработчиков из Microsoft Research
под руководством Don Syme решила, что
языки семейства ML вполне подходят
для реализации функциональной парадигмы
на платформе .NET. Идея разработки нового
языка появилась во время работы
над Generic’ами — реализацией обобщённого
программирования для Common Language Runtime. Известно,
что одно время в качестве прототипа
нового языка рассматривался Haskell, но
из-за функциональной чистоты и более
сложной системы типов
Следующим шагом в развитии нового
языка стало появление в 2005 году
его первой версии. С тех пор
вокруг F# стало формироваться
Исполняемый файл fsi.exe, входящий в комплект поставки F#, представляет собой интерактивную консоль, в которой можно быстро проверить работоспособность отдельных фрагментов кода на F#.
В состав современных инсталляционных пакетов F# входят также модули интеграции в Visual Studio 2008 и свободно распространяемую Visual Studio 2008 Shell, которые позволяют компилировать участки кода прямо из редактора. Это средство видится авторам наиболее удобным для первоначального знакомства с языком, так как открыв текст программы во встроенном редакторе кода, можно отправлять выделенные участки на исполнение простым нажатием комбинации клавиш Alt+Enter.
Исполняемый файл fsc.exe — непосредственно компилятор исходного кода F#, который читатель может использовать совместно со своим любимым текстовым редактором.
Утилиты fsc.exe и fsi.exe отлично работают и под Mono, открытой реализацией .NET Framework.
Файлы, содержащие код на F#, обычно имеют следующие расширения:
В некоторых источниках можно встретить в начале F# кода директиву #light on. Эта директива отключает режим совместимости синтаксиса с OCaml, делая отступы в коде значимыми (как, например в Python или Haskell). В последних версиях облегчённый режим включен по умолчанию, поэтому необходимости в указании директивы #light больше нет [4].
F# является мультипарадигменным
языком, а это значит, что на
нём можно реализовывать
F# поддерживает следующие
F# поддерживает объектно-
Visual F# в Visual Studio 2012 расширяет язык
F# для поддержки информационно-
Информационно-насыщенное программирование на F# фокусируется на коде и может использоваться как в скриптах, так и в проектах. Оно также позволяет указывать подключения к базе данных SQL Server и OData непосредственно в коде, определяя строгие типы с помощью IntelliSense. Механизм является расширяемым, позволяя записывать или ссылаться на новые поставщики для данных, кода и технологий, таких как SharePoint, веб-онтологий, инструментария управления Windows (WMI), XML и другие источники информации. Технически информационно-насыщенное программирование в F# включает в себя механизмы поставщиков типов F#, Выражения запросов F# и набор встроенных поставщиков типа для базы данных, OData и программирование веб-служб.
F# также поддерживает все
Visual F# содержит также библиотеку
F#, которая имеет много полезных
функций и типов. К ним
Кроме того, библиотека F# поддерживает асинхронные рабочие процессы для обеспечения параллельных вычислений и механизмы для связи между параллельными рабочими процессами. Дополнительные сведения см. в разделах Асинхронные рабочие потоки (F#), Класс Control.Async (F#) и Класс Control.MailboxProcessor<'Msg> (F#).
FSharp.Core.dll — основная библиотека
F#. Дополнительные библиотеки
Отдельно скомпилированные основные версии библиотеки F# существуют, чтобы поддерживать различные версии .NET Framework. Версия 2.0 поддерживает .NET Framework 2.0, 3.0 и 3.5, а 4.0 поддерживает платформу .NET Framework 4 и более поздние версии платформы .NET Framework. Кроме того, для загрузки доступны версии библиотеки ядра F# для Silverlight [5].
Базовый элемент синтаксиса F# – это выражение. Примеры выражений:
Результатом вычисления выражения является значение. Значение будем отделять от выражения символом =>:
Значение получается из выражения в процессе вычисления. Будем обозначать один шаг вычисления символом |->. Например:
(1 + 2) ∗ (3 + 4)
|−> 3 ∗ (3 + 4)
|−> 3 ∗ 7
|−> 21
Вычисления могут происходить
последовательно, как в предыдущем
примере, или параллельно. Во втором
случае, независимые друг от друга
выражения вычисляются
(1 + 2) ∗ (3 + 4)
|−> 3 ∗ 7
|−> 21
Значение ”Hello World” + 1 не будет вычислено потому, что оно некорректно типизировано (ill-typed). В F# каждое выражение имеет тип. Тип выражения говорит о том, какие значения могут получиться при вычислении этого выражения и получатся ли какие-нибудь значения вообще. Выражение корректно типизировано (well-typed), если у него есть как минимум один тип. У выражения может быть более одного типа – это называется полиморфизм. Теория типов базируется на идеях Б. Рассела и А. Уайтхеда. Они предложили сопоставлять высказыванию (пропозициональной функции) некоторый тип, который является его доменом или областью определения. Иерархия, составленная из таких типов, должна была разрешить парадоксы наивной теории множеств и послужить основанием математики.
Будем записывать тип выражения в формате hexpi : htypei. В общем случае, тип задаётся набором значений, которые могут принимать выражения этого типа и набором операций над типом. Например:
Программа на F# состоит из деклараций. Рассмотрим декларацию переменных:
Информация о работе Функциональное программирование и язык F