Similar presentations:
5_функционалы (1)
1. Функциональное программирование
Лекция 5.Функционалы.
2. Аргументы и значения функции
◼Аргумент, значением которого является константа,
называется аргументом, представляющим данные
◼
Аргумент, значением которого является функция,
называется функциональным аргументом
◼
Значением функции может быть константа или вновь
построенная функция
◼
Функция с функциональным аргументом или значением
называется функционал
3. Функциональный аргумент
◼ Символ, связанный формой DEFUN◼ Символ, представляющий системное имя
функции
◼ Лямбда-выражение без фактических
параметров
◼ Замыкание
4. Автофункции
◼Рекурсивный функционал, в качестве
функционального аргумента использующий себя,
называется автоаппликативной функцией
(defun !(n) (fact 'fact n))
(defun fact (f n)
(if (= n 0) 1
(* n (funcall f f (- n 1)))
)
)
(! 3) → 6
5. Автофункции
◼ Функционал, возвращающий себя вкачестве значения, называется
авторепликативной функцией
(defun f()
(lambda (x)
(list x (list ‘quote x)))
‘(lambda (x)
(list x (list ‘quote x)))
)
(f) → (lambda (x) (list x (list ‘quote x)))
6. Применяющие (аппликативные) функционалы
Назначение: применить функциональный аргументк аргументам, представляющим данные
◼
(APPLY ‘f ‘(x1 x2 … xn))
◼
(FUNCALL ‘f ‘x1 ‘x2 … ‘xn)
7. Функционал APPLY
(APPLY f x-lis) (EVAL (CONS f x-lis))◼ (apply ‘+ ‘(3 4 5)) → 12
◼ (apply ‘car ‘((a b c))) → a
◼ (setq f ‘cons)
(apply f ‘(a (b c))) → (a b c)
◼ (apply ‘eval ‘(+ 4 5)) → 9
◼ (apply ‘apply (+ (4 5)) → 9
8. Функционал FUNCALL
(FUNCALL f &REST x) (EVAL (LIST f &REST x))◼
(funcall ‘* 2 3 4) → 24
◼ (funcall ‘car ‘(a b c)) → a
◼ (funcall ‘cdr ‘(a b c)) → (b c)
◼ (setq cdr ‘car) (funcall cdr ‘(a b c)) → a
◼ (funcall ‘car ‘(a b c) ‘(b c d)) → a
◼ (setq f ‘cons) (funcall f ‘a ‘(b c)) → (a b c)
9. Отображающие (MAP) функционалы
Назначение: преобразование списка илипорождение побочного эффекта
(МАР_ fn lis1 … lisn)
10. МАР голов списков
(list(f (car lis1)…(car lisn))
(f (cadr lis) …(cadr lisn))
…
(f (cad…dr lis) …(cad…dr lisn))
)
* mapcar
* mapcan
* mapc
11. МАР хвостов списков
(list(f lis1…lisn)
(f (cdr lis) …(cdr lisn))
…
(f (cd…dr lis) …(cd…dr lisn))
)
* maplist
* mapcon
* mapl
12. МАР, использующий CONS
(MAPCAR f &rest lis)◼ (mapcar ‘listp ‘(a (b) c)) → (NIL T NIL)
◼ (mapcar ‘+ (2 3 4) (7 6 5)) → (9 9 9)
◼ (mapcar ‘eq n ‘(a b n v n)) → (NIL NIL T NIL T)
◼ (mapcar ‘(lambda (x y) (+ x y))
‘(2 3) ‘(3 7)) → (5 10)
13. МАР, использующий CONS
(MAPLIST f &rest lis)◼ (maplist ‘listp ‘(a (b) c)) → (T T T)
◼ (maplist ‘append (2 3) (7 6)) → ((2 3 7 6) (3 6))
◼ (maplist ‘append (2 3) (7)) → ((2 3 7) (3))
◼ (maplist ‘(lambda (x) x)
‘(2 3 7)) → ((2 3 7) (3 7) (7))
14. МАР, использующий NCONS
(MAPCAN f &rest lis)(MAPCAN f lis)
(APPLY ‘NCONC (MAPCAR f lis))
(MAPCON f &rest lis)
(MAPCON f lis)
(APPLY ‘NCONC (MAPLIST f lis))
15. МАР, использующий PROG2
(MAPC f &rest lis)(MAPL f &rest lis)
(MAPC f lis)
(PROG2
(MAPCAR f lis)
lis)
(MAPL f lis)
(PROG2
(MAPLIST f lis)
lis)
16. Замыкания
(FUNCTION (lambda_form))◼ (setq z 5)
(setq p (function (lambda (x y) (* (+ x z) y))))
(funcall p 1 -1) → -6
17. Создание генераторов
◼ (defun f (x)(function (lambda () (setq x (+ x 1)))))
2)))))
◼ (setq next (Nn 3))
◼ (funcall next) → 4
5
◼ (funcall next) → 5
7
……
programming