Функциональное программирование
Аргументы и значения функции
Функциональный аргумент
Автофункции
Автофункции
Применяющие (аппликативные) функционалы
Функционал APPLY
Функционал FUNCALL
Отображающие (MAP) функционалы
МАР голов списков
МАР хвостов списков
МАР, использующий CONS
МАР, использующий CONS
МАР, использующий NCONS
МАР, использующий PROG2
Замыкания
Создание генераторов
166.00K
Category: programmingprogramming

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
……
English     Русский Rules