b923edff0b5b8b2ff62cf42a7263efd1.ppt
- Количество слайдов: 37
Функциональное программирование Функции. Базовые функции. Лекция 2 Мар. ГТУ 2009 г. 1
Понятие функции n Диалог с интерпретатором ЛИСПА. n Блокировка QUOTE n Функция EVAL n Использование символов в качестве переменных n Базовые функции n Арифметические функции. n Мар. ГТУ 2009 г. 2
Понятие функции Мар. ГТУ 2009 г. 3
Понятие функции n n В математике функция отображает одно множество в другое. Для х из множества определения X ставится в соответствие Y из множества значений функции F. y = F (x) y F: x y Виды отображения ¨ Функция (X и Y – числовые множества) ¨ Вектор-функция (X и Y – многомерны) ¨ Функционал (X – произвольной природы и Y – поле) Мар. ГТУ 2009 г. 4
Аргументы функции n n У функции может быть любое количество аргументов, в том числе их может не быть совсем. Функция без аргументов имеет постоянное значение. abs(-3) 3 абсолютная величина. +(2, 3) 5 сложение union((a, b), (c, b)) (a, b, c) объединение множеств количество_букв (слово) 5 Мар. ГТУ 2009 г. 5
Типы аргументов и функций n Мар. ГТУ 2009 г. Функция в общем случае задает отображение из нескольких множеств в множество значений. F (x, y) z F: Ax. B С 6
Основные понятия: программа, функции и выражения 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 x) (g x y) (h x (g y z)) (+ x y) (- x y) (* x (+ x z)) Достоинства: n упрощается синтаксический анализ выражений; n данные (списки) и программа (списки) представляются единым образом. Мар. ГТУ 2009 г. 8
Диалог с интерпретатором ЛИСПА Мар. ГТУ 2009 г. 9
Диалог с интерпретатором ЛИСПА Read-eval-print цикл loop (read evaluate print) n В Лиспе сразу читается(read), затем вычисляется (evaluate) значение функции и выдается (print) значение. * (+ 2 3) 5 n Мар. ГТУ 2009 г. 10
Иерархия вызовов В функцию могут входить функциональные подвыражения: * (* (+ 1 2)(- 11 4)) * 21 + 1 Мар. ГТУ 2009 г. 2 11 4 11
Блокировка QUOTE Мар. ГТУ 2009 г. 12
Блокировка 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 Y ) * '' y ( QUOTE Y ) * ' 3. 17 *(+'23) 5 *t T *'t T Апостроф автоматически преобразуется в QUOTE. Перед константами не надо ставить апостроф Мар. ГТУ 2009 г. 14
Функция EVAL Мар. ГТУ 2009 г. 15
Функция EVAL n n n EVAL – дополнительный вызов интерпретатора Лиспа. Вызов может производиться внутри вычисляемого S-выражения. EVAL снимает блокировку QUOTE. * ( quote ( + 1 2 ) ) (+12) * ( eval ( quote ( + 1 2 ) ) ) 3 QUOTE и EVAL действуют во взаимно противоположных направлениях и аннулируют эффект друга. Мар. ГТУ 2009 г. 16
Использование символов в качестве переменных Мар. ГТУ 2009 г. 17
Использование символов в качестве переменных Константы имеют значения. * 1. 6 n Изначально символы не имеют значения. n Значения символов хранятся в ячейках (символ связан (bind) сo значением) n Мар. ГТУ 2009 г. 18
Присвоение значения в Лиспе. Отличие: n Не оговаривается, что может хранится в ячейке: целое, атом, список, массив и т. д. В ячейке может хранится что угодно. n С символом может быть связана не только ячейка со значением, а многие другие ячейки, число которых не ограничено. (* ( + 1 2 ) ( + 3 4 )) Мар. ГТУ 2009 г. 19
Функция 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 m ' k ) k *m k Мар. ГТУ 2009 г. 21
Обобщенная функция 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
Базовые функции CAR доступ к первому элементу n CDR доступ к укороченному на один элемент списку n CONS строит списки n ATOM различает составные и атомарные объекты n EQ проверка атомарных объектов на равенство n Мар. ГТУ 2009 г. 24
Функция CAR Форма записи: CAR < список > Первый элемент списка – голова. Список без головы – хвост. * ( car nil ) nil * ( car 'nil ) nil Мар. ГТУ 2009 г. * ( car '(( head ) tail )) ( head ) * ( car (a b c)) ошибка – имя несуществующей функции. 25
Функция 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 'a '( b c ) ) (abc) * ( cons '( a b ) '( c d ) ) ( ( a b) c d ) Мар. ГТУ 2009 г. * ( cons 'a nil ) (a) 28
Связь между CAR, CDR и CONS Назначение функций Разбор (селекторы) car Создание (конструктор ) cdr cons Запись и результат функций CAR список s-выражение Мар. ГТУ 2009 г. CDR список Cons s-выражение список 29
Точечная нотация Единая базовая структура для конструирования 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 '((a b c) d)))) (a b c) (c) Мар. ГТУ 2009 г. * (cddar '((a b c) d)) (c) 31
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 ) (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 Мар. ГТУ 2009 г. 34
Арифметические функции Мар. ГТУ 2009 г. 35
Арифметические функции 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
b923edff0b5b8b2ff62cf42a7263efd1.ppt