Скачать презентацию Функциональное программирование Функции Базовые функции Лекция 2 Мар Скачать презентацию Функциональное программирование Функции Базовые функции Лекция 2 Мар

b923edff0b5b8b2ff62cf42a7263efd1.ppt

  • Количество слайдов: 37

Функциональное программирование Функции. Базовые функции. Лекция 2 Мар. ГТУ 2009 г. 1 Функциональное программирование Функции. Базовые функции. Лекция 2 Мар. ГТУ 2009 г. 1

Понятие функции n Диалог с интерпретатором ЛИСПА. n Блокировка QUOTE n Функция EVAL n Понятие функции n Диалог с интерпретатором ЛИСПА. n Блокировка QUOTE n Функция EVAL n Использование символов в качестве переменных n Базовые функции n Арифметические функции. n Мар. ГТУ 2009 г. 2

Понятие функции Мар. ГТУ 2009 г. 3 Понятие функции Мар. ГТУ 2009 г. 3

Понятие функции n n В математике функция отображает одно множество в другое. Для х Понятие функции n n В математике функция отображает одно множество в другое. Для х из множества определения X ставится в соответствие Y из множества значений функции F. y = F (x) y F: x y Виды отображения ¨ Функция (X и Y – числовые множества) ¨ Вектор-функция (X и Y – многомерны) ¨ Функционал (X – произвольной природы и Y – поле) Мар. ГТУ 2009 г. 4

Аргументы функции n n У функции может быть любое количество аргументов, в том числе Аргументы функции n n У функции может быть любое количество аргументов, в том числе их может не быть совсем. Функция без аргументов имеет постоянное значение. abs(-3) 3 абсолютная величина. +(2, 3) 5 сложение union((a, b), (c, b)) (a, b, c) объединение множеств количество_букв (слово) 5 Мар. ГТУ 2009 г. 5

Типы аргументов и функций n Мар. ГТУ 2009 г. Функция в общем случае задает Типы аргументов и функций n Мар. ГТУ 2009 г. Функция в общем случае задает отображение из нескольких множеств в множество значений. F (x, y) z F: Ax. B С 6

Основные понятия: программа, функции и выражения n переменная (атом). X Y n Variable 1 Основные понятия: программа, функции и выражения n переменная (атом). X Y n Variable 1 Long. Song n вызов функции (функция аргумент1 аргумент2. . . ) имена функций (атомы) n композиции функций n (функция 1 (функция 2 аргумент21 аргумент22. . . ) аргумент2. . . ) Мар. ГТУ 2009 г. 7

Префиксная нотация Математика f(x) g(x, y) h(x, g(y, z)) x+y x–y x*(x+z) ЛИСП (f Префиксная нотация Математика f(x) g(x, y) h(x, g(y, z)) x+y x–y x*(x+z) ЛИСП (f x) (g x y) (h x (g y z)) (+ x y) (- x y) (* x (+ x z)) Достоинства: n упрощается синтаксический анализ выражений; n данные (списки) и программа (списки) представляются единым образом. Мар. ГТУ 2009 г. 8

Диалог с интерпретатором ЛИСПА Мар. ГТУ 2009 г. 9 Диалог с интерпретатором ЛИСПА Мар. ГТУ 2009 г. 9

Диалог с интерпретатором ЛИСПА Read-eval-print цикл loop (read evaluate print) n В Лиспе сразу Диалог с интерпретатором ЛИСПА Read-eval-print цикл loop (read evaluate print) n В Лиспе сразу читается(read), затем вычисляется (evaluate) значение функции и выдается (print) значение. * (+ 2 3) 5 n Мар. ГТУ 2009 г. 10

Иерархия вызовов В функцию могут входить функциональные подвыражения: * (* (+ 1 2)(- 11 Иерархия вызовов В функцию могут входить функциональные подвыражения: * (* (+ 1 2)(- 11 4)) * 21 + 1 Мар. ГТУ 2009 г. 2 11 4 11

Блокировка QUOTE Мар. ГТУ 2009 г. 12 Блокировка QUOTE Мар. ГТУ 2009 г. 12

Блокировка QUOTE * (QUOTE a) константа атом A a * (QUOTE (A B C) Блокировка QUOTE * (QUOTE a) константа атом A a * (QUOTE (A B C) ) константа список (A B C) * (ATOM (QUOTE A)) аргумент предиката - атом A T * (ATOM (QUOTE (A B C))) аргумент предиката – список Nil * (ATOM A) значение не определено Мар. ГТУ 2009 г. 13

' (QUOTE) * '(+ 2 3 ) * ( quote ' y ) ( ' (QUOTE) * '(+ 2 3 ) * ( quote ' y ) ( QUOTE Y ) * '' y ( QUOTE Y ) * ' 3. 17 *(+'23) 5 *t T *'t T Апостроф автоматически преобразуется в QUOTE. Перед константами не надо ставить апостроф Мар. ГТУ 2009 г. 14

Функция EVAL Мар. ГТУ 2009 г. 15 Функция EVAL Мар. ГТУ 2009 г. 15

Функция EVAL n n n EVAL – дополнительный вызов интерпретатора Лиспа. Вызов может производиться Функция EVAL n n n EVAL – дополнительный вызов интерпретатора Лиспа. Вызов может производиться внутри вычисляемого S-выражения. EVAL снимает блокировку QUOTE. * ( quote ( + 1 2 ) ) (+12) * ( eval ( quote ( + 1 2 ) ) ) 3 QUOTE и EVAL действуют во взаимно противоположных направлениях и аннулируют эффект друга. Мар. ГТУ 2009 г. 16

Использование символов в качестве переменных Мар. ГТУ 2009 г. 17 Использование символов в качестве переменных Мар. ГТУ 2009 г. 17

Использование символов в качестве переменных Константы имеют значения. * 1. 6 n Изначально символы Использование символов в качестве переменных Константы имеют значения. * 1. 6 n Изначально символы не имеют значения. n Значения символов хранятся в ячейках (символ связан (bind) сo значением) n Мар. ГТУ 2009 г. 18

Присвоение значения в Лиспе. Отличие: n Не оговаривается, что может хранится в ячейке: целое, Присвоение значения в Лиспе. Отличие: n Не оговаривается, что может хранится в ячейке: целое, атом, список, массив и т. д. В ячейке может хранится что угодно. n С символом может быть связана не только ячейка со значением, а многие другие ячейки, число которых не ограничено. (* ( + 1 2 ) ( + 3 4 )) Мар. ГТУ 2009 г. 19

Функция SET n n Функция SET cвязывает символ со значением, предварительно вычисляя значения аргументов. Функция SET n n Функция SET cвязывает символ со значением, предварительно вычисляя значения аргументов. В качестве значения функция SET возвращает значение второго аргумента. * ( set 'd ' ( x y z ) ) (xyz) * ( set ' a ' b ) b * ( set d ' b ) ошибка (не определена переменная d) * ( set (car ‘(x y z)) ' b ) b Мар. ГТУ 2009 г. 20

Функция SETQ Аналогична SET, но не вычисляет значение первого аргумента. Буква Q указывает на Функция SETQ Аналогична SET, но не вычисляет значение первого аргумента. Буква Q указывает на блокировку. * ( setq m ' k ) k *m k Мар. ГТУ 2009 г. 21

Обобщенная функция SETF Действует аналогично SETQ, но может использоваться для присвоения символу не только Обобщенная функция SETF Действует аналогично SETQ, но может использоваться для присвоения символу не только значения. (setf L '((b (b b(a))))) (setq х у) (setf x у) (set х у) (setf (symbol-value x) у) * (setq a ‘(1 2 3)) (1 2 3) * (setf (second a) '4) 4 *a (1 4 3) Мар. ГТУ 2009 г. 22

Базовые функции Мар. ГТУ 2009 г. 23 Базовые функции Мар. ГТУ 2009 г. 23

Базовые функции CAR доступ к первому элементу n CDR доступ к укороченному на один Базовые функции CAR доступ к первому элементу n CDR доступ к укороченному на один элемент списку n CONS строит списки n ATOM различает составные и атомарные объекты n EQ проверка атомарных объектов на равенство n Мар. ГТУ 2009 г. 24

Функция CAR Форма записи: CAR < список > Первый элемент списка – голова. Список Функция CAR Форма записи: CAR < список > Первый элемент списка – голова. Список без головы – хвост. * ( car nil ) nil * ( car 'nil ) nil Мар. ГТУ 2009 г. * ( car '(( head ) tail )) ( head ) * ( car (a b c)) ошибка – имя несуществующей функции. 25

Функция CDR Форма записи: CDR < список > Для атомов применение CDR выдает ошибку, Функция CDR Форма записи: CDR < список > Для атомов применение CDR выдает ошибку, т. к. аргумент – не список. * (cdr '( a ) ) nil * ( cdr nil ) nil Мар. ГТУ 2009 г. * ( cdr 'kat ) ошибка * ( cdr '( ( a b) ( c d ) ) ) ((cd)) 26

Вычисление структур Исполнение идет Вычисление структур Исполнение идет "изнутри наружу". ( сar ( cdr '( ( a b ) c d ) ) ) В Лиспе сначала выполняются внутренние функции, а затем внешние. Мар. ГТУ 2009 г. 27

Функция CONS Форма записи: CONS < s-выражение > <список > Первый аргумент становится головой Функция CONS Форма записи: CONS < s-выражение > <список > Первый аргумент становится головой второго аргумента, который обязательно является списком. * ( cons 'a '( b c ) ) (abc) * ( cons '( a b ) '( c d ) ) ( ( a b) c d ) Мар. ГТУ 2009 г. * ( cons 'a nil ) (a) 28

Связь между CAR, CDR и CONS Назначение функций Разбор (селекторы) car Создание (конструктор ) Связь между CAR, CDR и CONS Назначение функций Разбор (селекторы) car Создание (конструктор ) cdr cons Запись и результат функций CAR список s-выражение Мар. ГТУ 2009 г. CDR список Cons s-выражение список 29

Точечная нотация Единая базовая структура для конструирования Sвыражений (dot-nоtation) – левая и правая части Точечная нотация Единая базовая структура для конструирования Sвыражений (dot-nоtation) – левая и правая части бинарного узла равноправны и могут хранить данные любой природы. (a. b) (c. (a. b)) ((a. b). c) CONS строит бинарный узел и заполняет его парой объектов. Первый аргумент размещается в левой части бинарного узла, а второй – в правой. Функция CAR обеспечивает доступ к объектам, расположенным слева от точки, а функция CDR – справа. (A) идентичен (A. Nil) (A 1 A 2. . . Ak) идентичен (A 1. (A 2. (. . (Ak. Nil). . . ))) Мар. ГТУ 2009 г. 30

Комбинации функций CAR и CDR Мнемоничные обозначения композиций из многократных CAR-CDR * (cdr (car Комбинации функций CAR и CDR Мнемоничные обозначения композиций из многократных CAR-CDR * (cdr (car '((a b c) d)))) (a b c) (c) Мар. ГТУ 2009 г. * (cddar '((a b c) d)) (c) 31

N – элемент Функция NTH извлекает n-й элемент из списка Форма записи: NTH < N – элемент Функция NTH извлекает n-й элемент из списка Форма записи: NTH < n > <список > * (NTH 7 '(1 2 3 4 5 6 7 8 9 10)) 7 Мар. ГТУ 2009 г. 32

Функция LIST Форма записи: (list s-выражение 1 s-выражение 2…) * ( list 1 2 Функция LIST Форма записи: (list s-выражение 1 s-выражение 2…) * ( list 1 2 ) (12) * ( list ' a ' b ( + 1 2 ) ) (ab 3) * ( list ' a ' ( b c ) ' d ) (a(bc)d) * ( list nil ) ( nil ) Мар. ГТУ 2009 г. * (cons 1 (cons 2 NIL) (1 2) 33

Функция LENGTH Форма записи: LENGTH <список > * (length '(1 (2 3) 4)) 3 Функция LENGTH Форма записи: LENGTH <список > * (length '(1 (2 3) 4)) 3 Мар. ГТУ 2009 г. 34

Арифметические функции Мар. ГТУ 2009 г. 35 Арифметические функции Мар. ГТУ 2009 г. 35

Арифметические функции n n n n Арифметические функции могут быть использованы с целыми или Арифметические функции n n n n Арифметические функции могут быть использованы с целыми или действительными аргументами. Число аргументов для большинства арифметических функций может быть разным. (+ x 1 x 2. . . xn) возвращает x 1 + x 2 + x 3 +. . . + xn. (- x 1 x 2. . . xn) возвращает x 1 - x 2 - x 3 -. . . - xn. (* y 1 y 2. . . yn) возвращает y 1 * y 2 * y 3 *. . . * yn. (/ x 1 x 2. . . xn) возвращает x 1/x 2/. . . /xn. Специальные функции (1+ x) и (1 - x) Мар. ГТУ 2009 г. 36

Спасибо за внимание! Вопросы? Мар. ГТУ 2009 г. 37 Спасибо за внимание! Вопросы? Мар. ГТУ 2009 г. 37