- •1. Поколения языков программирования.
- •2.Понятие фп, история развития.
- •1 . Трактовка функции через понятие переменная
- •2. Определения без переменных:
- •3.Программирование при помощи функций.
- •4. Программирование при помощи процедур.
- •5. Символьные данные в строго-функциональных языках.
- •6.Элементарные селекторы, конструкторы и предикаты.
- •7. Рекурсивные функции.
- •8. Проблема выбора подфункции
- •9. Накапливающий параметр — аккумулятор
- •10. Локальное определение.
- •11. Функции высших порядков.
- •12. Фвп применительно к языку Haskell.
- •13. Основы лямбда исчисления
- •14. Правило преобразования лямбда выражения.
- •15. Ромбическое свойство системы редукций.
- •16. Стандартные порядки редукций.
- •18. Структуры данных и их типы на языке Haskell.
- •1. Синонимы типов
- •19. Понятие модуля в Haskell.
- •Абстрактные типы данных
- •Другие аспекты использования модулей
- •20. Классы и их экземпляры в Haskell.
- •21. Наследование в языке Haskell.
- •22. Сорта типов и структуры данных.
- •[Править]Определение
- •[Править]Примеры
4. Программирование при помощи процедур.
int max (int x, int y) //1
{
if (x>=y) return x;
else return y;
}
M=max(max(a,b),c)
Макс. является строгой функцией. Отход от строгости начинается тогда, когда функция не выдает результат, а присваивает его одному из своих параметров.
void max(int x, int y, int m) //2
{
if (x>=y) m=x;
else m=y;
return;
}
max(a,b,m); max(m,c,m) – два вызова функции
void max(int x, int y) //3
{
if x>=y x=y;
return;
}
max(a,b); max(a,c) – два вызова функции
Варианты 2 и 3 обладают свойствами функций, но имеют побочный эффект из-за присваивания.
При составлении программ на основе таких процедур приходится думать в терминах нарастающих изменений значений переменных.
Строго функциональные языки не допускают побочных эффектов.
5. Символьные данные в строго-функциональных языках.
Определим класс символьных выражений, которые еще называют S-выражения.
S-выражения состоят из атомов.
(Иван Петров 33 года)
((Иван 17)(Мария 25)(Василий 6))
((Мой дом)имеет(большие(светлые окна)))
Атомы бывают символьные и числовые.
S-выражения – неделимая последовательность букв и цифр, содержащая хотя бы один символ, отличающий его от чисел.
К символьным атомам применяется только операция сравнения.
Числовыми атомами является последовательность цифр возможно со знаком, обозначающие десятичные цифры.
Простейшее S-выражение – это атом, сложное – набор атомов, разделенных пробелом.
Общие правила S-выражений можно просуммировать в рекурсивном определении:
1. атом есть S-выражение.
2. последовательность S выражений, заключенная в скобки, является S-выражением (списком)
Формула: S-выражение:
p+q (плюс p q)
p-q (минус p q)
p*q (умн p q)
p/q (дел p q)
p’ (степ p q)
x2+2x-31 =>
(плюс(степ x 2)(минус(умн 2 x)31))
(минус(плюс(степ x 2)(умн 2 x))31)
6.Элементарные селекторы, конструкторы и предикаты.
1) car – применяется к списку и ее результатом является первый элемент списка (head)
x |
car (x) |
(AB) |
A |
((AB)(CD)) |
(AB) |
(A) |
A |
car – элементарный селектор
car :: [a] → a
car [ ] = error “ “
car (x:xs) = x
2) cdr – возвращает S-выражение без первого элемента
-
x
cdr(x)
(AB)
(B)
((AB)(CD))
((CD))
(A)
NIL
cdr :: [a] → [a]
cdr [ ] = [ ]
cdr (x:xs) = xs
Две взаимовып-ие(наверно взаимодополняющие, мб взаимовыполнимые) функции называются селекторами. С их помощью из списка можно выбрать любой элемент.
третий(х)=car(cdr(cdr x)))
3) cons - примитивный конструктор берет два S-выражения и соединяет их в одно выражение
x |
y |
cons(x,y) |
A |
(BC) |
(ABC) |
(AB) |
(CD) |
((AB)(CD)) |
A |
NIL |
(A) |
двучлен(x,y)=cons(x,cons(y,NIL))
квадрат(a,b,c,d)=двучлен(двучлен(a,b),двучлен(c,d))
Элементарные предикаты.
Предикат – функция, возвращающая значение либо «истина», либо «ложь».
атом(x) определяет является ли S-выражение атомом или нет.
x |
атом(х) |
A |
True |
(A) |
False |
NIL |
False/True |
(ABC) |
False |
слово |
True |
127 |
True |
(127) |
False |
f(x) = если атом (х), то NIL, иначе car (x)
Если car была частично определена, то f(x) всюду определенная функция.
равно (x,y) – сравнивает 2 атома (ложь, если не равны и если хоть 1 элемент не является списком)
Предикаты нужны для построения условных функций.
