Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_okonchatelny_variant.doc
Скачиваний:
0
Добавлен:
05.01.2020
Размер:
553.98 Кб
Скачать

1 . Трактовка функции через понятие переменная

1)функция как переменная величина?

2)функция – это закон(правило), по которому значения незав. перем-x соотв. значению рассмотренной переменной.?

2. Определения без переменных:

1)Определяется не сама функция, а функциональная ситуация. Пусть M и N – 2 произвольных множества. Говорят, что на М определена функция f, принимающая значения из N, если каждому из элементов x принадлежащих М, поставлен в соответствие только один элемент множества N.

2)Функция – это правило или закон, посредством которого для каждого элемента одного множества указывается некий элемент другого множества.

3)Функция – это соответствие, в силу которого каждому элементу x принадлежащему М отвечает единственный элемент множества N.

История развития

Теоретические основы императивного программирования были заложены в 30-х годах Аланом Тьюрингом и Джоном фон Нейманом. Теория положенная в основу функционального подхода, также родилась в 20-х - 30-х годах. В числе разработчиков математических основ функционального программирования можно назвать Мозеса Шёнфинкеля (Германия и Россия) и Хаскелла Карри (Англия), разработавших теорию комбинаторов, а также Алонзо Чёрча (США), создателя лямбда исчисления.

Теория так и оставалась теорией, пока в начале 50-х Джон МакКарти не разработал язык Lisp, который стал первым почти функциональным языком программирования и на протяжении многих лет оставался единственным таковым. Хотя Lisp все еще используется (как и FORTRAN), он уже не удовлетворяет некоторым современным запросам, которые заставляют нас взваливать как можно большую ношу на компилятор, облегчив тем самым непосильный труд программиста. Необходимость в этом, конечно же, возникла из-за все возрастающей сложности программного обеспечения.

В связи с этим обстоятельством все большую роль начинает играть типизация. В конце 70-х - начале 80-х интенсивно разрабатываются модели типизации, подходящие для функциональных языков. Большинство этих моделей включали в себя поддержку таких мощных механизмов как абстракция данных и полиморфизм. Появляется множество типизированных функциональных языков: Haskell, Miranda, Hope, Scheme, Lisp, ISWIM, ML, Gofer, Clean, FP, APL, Nial, Krc, Logo, KLO, Mandala и многие другие. Вдобавок постоянно увеличивается число диалектов.

В результате вышло так, что практически каждая группа, занимающаяся функциональным программированием, использовала собственный язык. Это препятствовало дальнейшему распространению этих языков и порождало многочисленные более мелкие проблемы. Чтобы исправить ситуацию, объединенная группа ведущих исследователей в области функционального программирования решила воссоздать достоинства различных языков в новом универсальном функциональном языке. Первая реализация этого языка, названного Haskell в честь Хаскелла Карри, была создана в начале 90-х годов. В настоящее время действителен стандарт Haskell 98. 

3.Программирование при помощи функций.

{a,b,c,d} – область определения

{e,f,g,h} – область значений

<a,e>;<b;g>;<c,f>;<d,NIL>

x

a

b

c

d

f(x)

e

g

f

NIL

Недостаток: нельзя использовать для больших функций определений.

квадрат(х)=х*х , х – параметр определения

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

Программирование при помощи функций происходит следующим образом: определяется базовый набор полезных функций (максимум, квадрат), которые являются программами с аргументами на входе и результатом на выходе. Если их не хватает для построения программы, то на их базе конструируется более сложная функция, т.е. новые функции должны ссылаться только на основные базовые функции, таким образом, получается функциональная иерархия.

наиб(x,y,z)=макс(макс(x,y),z)

макс(наиб(x,y,z),наиб(a,b,c))

Такой подход называется методом композиции, при котором функции могут вкладываться одна в другую на произвольную глубину.

a+b*c  плюс(a,умн(b,c))

Такая запись называется аппликативной структурой.

Аппликативная структура имеет важное свойство:

Значение выражения единственным образом определяется по значению составляющих его частей, т.е. если одно и то же выражение встретилось дважды в одном и том же контексте, то оно будет иметь одно и то же значение. Язык, в котором свойство аппликативности сохраняется для всех его выражений, называется аппликативным или строго функциональным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]