Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
progF_pos.doc
Скачиваний:
36
Добавлен:
11.05.2015
Размер:
1.51 Mб
Скачать

52

Содержание

1. ВВЕДЕНИЕ В ФУНКЦИИ ………………………………………………

1. 1. Чистые функции ……………………………………………………..

1. 2. Функциональность …………………………………………………..

2. ВВЕДЕНИЕ В ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ ……

2. 1. О языке Лисп ………………………………………………………...

2. 2. Примеры программ ………………………………………………….

2. 3. Символьная обработка ……………………………………………...

2. 4. Особенности Лиспа …………………………………………………

3. ОСНОВЫ ЯЗЫКА ЛИСП ………………………………………………..

3. 1. Символы и списки …………………………………………………..

3. 2. Понятие функции ……………………………………………………

3. 3. Базовые функции ……………………………………………………

3. 4. Имя и значение символа …………………………………………….

4. ОПРЕДЕЛЕНИЕ ФУНКЦИЙ ……………………………………………

5. МАТЕМАТИЧЕСКИЕ ОСНОВЫ: -ИСЧИСЛЕНИЕ …………………

5. 1. Введение в синтаксис ……………………………………………….

5. 2. Вычисление -выражений ………………………………………….

5. 3. Порядок редукций и нормальные формы ………………………….

5. 4. Рекурсивные выражения ……………………………………………

5. 5. Чистое -исчисление ………………………………………………..

5. 6. Ламбда-абстракции в Лиспе ……………………………………….

6. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ СПИСКОВ ……………………….

7. РЕКУРСИЯ ………………………………………………………………..

7. 1. Простая рекурсия ……………………………………………………

7. 2. Другие формы рекурсии …………………………………………….

8. ФУНКЦИИ БОЛЕЕ ВЫСОКОГО ПОРЯДКА ………………………….

8.1. Функционалы ………………………………………………………...

8.2. Способы композиции функций ……………………………………..

8.3. Замыкания …………………………………………………………….

8.4. Абстрактный подход ………………………………………………...

4

4

6

8

8

8

9

10

11

11

12

13

15

17

23

23

25

26

28

30

31

32

36

36

40

43

43

44

47

48

1. Введение в функции

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

1.1. Чистые функции

Функция (в математике) - отображение объектов из множества величин, названного областью определения функции (доменом), в объекты из некоторого целевого множества, именуемого областью значений функции.

Описание отображения задается правилом.

Пример:

sign : {множество целых чисел} --> {плюс, минус, нуль}

минус, если x<0,

sign(x) = нуль, если x=0,

плюс, если x<0.

Функции полные (тотальные, всюду определенные) и частичные функции.

Пример:

sign2(x)= минус, если x<0,

плюс, если x>0. Функция не определена при x=0

Функция - черный ящик.

Вход (параметр) ---> [ sign ] ---> выход (результат вычисления)

Понятия: формальный параметр, фактический параметр, применение функции - процесс подачи на вход функции фактического параметра.

Одно из фундаментальных положений функционального программирования: функция является механически зафиксированным правилом преобразования входов в выходы. Черный ящик является конструктивным блоком для функциональной программы, и с помощью объединения таких ящиков можно порождать более сложные операции. Такой процесс “объединения” ящиков называется функциональной композицией.

max(m,n) = m, если m>n, = n в противном случае. max: RR --> R a b | | v v [ max ] | v

max3(a,b,c) = a, если a>=b и a>c или a>=c и a>b, b, если b>=a и b>c или b>=c и b>a, c, если c>=a и c>b или c>=b и c>a, a в противном случае. (“В противном случае” - это если a=b=c.) a b c | | | | [ max ] | | [ max ] | max3(a,b,c)=max(a, max(b,c)). a b c | | | [ max3 ] | sm4(a,b,c,d) = sign(max (a, max3 (b, c, d))

- вычисляет знак максимального из четырех чисел (можно представить в виде черного ящика).

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

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

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