Функції планування, Детальна інформація
Функції планування
Реферат на тему:
Функції планування
Функції планування, або MAP - функції (mapping function) являють собою важливий клас функцій в мові програмування Лісп. Їх навіть правильно буде називати функціоналами, оскільки в якості аргументів вони приймають інші функції. MAP - функціонали відображають список або послідовність у нову послідовність, або породжують побічний ефект, який є повязаним з цією послідовністю. Імена функцій планування починаються з MAP та їх виклик має вигляд: (MAPx fn i1 i2 ... iN), де fn – функція від N аргументів, i1, i2, ...,iN – списки. Часто MAP - функціонал застосовується до одного аргумента - списку, тобто fn є функцією одного аргумента: (MAPx fn <список>).
1. Повторення обчислення функції на елементах списка
(MAPCAR <функція> <список1> ... <списокN>)
Виконуються дії <функції> над CAR-елементами списків, потім над другими елементами списків і так далі поки елементи хоча б у одному списку не закінчаться. Для двох вхідних списків у Ліспі ця функція може бути визначєна наступним чином:
(DEFUN MAPCAR2 (func lst1 lst2)
((OR (NULL lst1) (NULL lst2)) NIL)
(CONS (FUNCALL func (CAR lst1) (CAR lst2))
(MAPCAR2 func (CDR lst1) (CDR lst2))) )
Результатом функції є список, який побудовано з результатів виклику функціонального аргумента MAPCAR.
$ (MAPCAR '+ '(1 2 3) '(7 8 9) '(10 11 12))
(18 21 24)
$ (MAPCAR 'cons '(1 2 3) '(a b c))
((1 . A) (2 . B) (3 . C))
$ (MAPCAR 'atom '(1 2 3 4))
(T T T T)
$ (MAPCAR '(lambda (x) (list x (* x x))) '(1 2 3))
((1 1) (2 4) (3 9))
2. Повторення обчислення функції на хвостових частинах списка
(MAPLIST <функція> <список1> ... <списокN>)
Функція MAPLIST на відміну від функції MAPCAR діє не над елементами списків, а над їх хвостовими послідовностями. Тобто спочатку дії виконуються над вхідними списками, потім – над їх CDR – елементами, і так далі поки хоча б один зі списків не буде вичерпано. Для двох вхідних списків у Ліспі ця функція може бути визначєна наступним чином:
(DEFUN MAPLIST2 (func lst1 lst2)
((OR (NULL lst1) (NULL lst2)) NIL)
(CONS (FUNCALL func lst1 lst2)
(MAPLIST2 func (CDR lst1) (CDR lst2))) )
$ (MAPLIST 'CONS '(1 2 3) '(10 11 12))
(((1 2 3) 10 11 12) ((2 3) 11 12) ((3) 12))
$ (MAPLIST 'REVERSE '(1 2 3 4))
((4 3 2 1) (4 3 2) (4 3) (4))
Функції планування
Функції планування, або MAP - функції (mapping function) являють собою важливий клас функцій в мові програмування Лісп. Їх навіть правильно буде називати функціоналами, оскільки в якості аргументів вони приймають інші функції. MAP - функціонали відображають список або послідовність у нову послідовність, або породжують побічний ефект, який є повязаним з цією послідовністю. Імена функцій планування починаються з MAP та їх виклик має вигляд: (MAPx fn i1 i2 ... iN), де fn – функція від N аргументів, i1, i2, ...,iN – списки. Часто MAP - функціонал застосовується до одного аргумента - списку, тобто fn є функцією одного аргумента: (MAPx fn <список>).
1. Повторення обчислення функції на елементах списка
(MAPCAR <функція> <список1> ... <списокN>)
Виконуються дії <функції> над CAR-елементами списків, потім над другими елементами списків і так далі поки елементи хоча б у одному списку не закінчаться. Для двох вхідних списків у Ліспі ця функція може бути визначєна наступним чином:
(DEFUN MAPCAR2 (func lst1 lst2)
((OR (NULL lst1) (NULL lst2)) NIL)
(CONS (FUNCALL func (CAR lst1) (CAR lst2))
(MAPCAR2 func (CDR lst1) (CDR lst2))) )
Результатом функції є список, який побудовано з результатів виклику функціонального аргумента MAPCAR.
$ (MAPCAR '+ '(1 2 3) '(7 8 9) '(10 11 12))
(18 21 24)
$ (MAPCAR 'cons '(1 2 3) '(a b c))
((1 . A) (2 . B) (3 . C))
$ (MAPCAR 'atom '(1 2 3 4))
(T T T T)
$ (MAPCAR '(lambda (x) (list x (* x x))) '(1 2 3))
((1 1) (2 4) (3 9))
2. Повторення обчислення функції на хвостових частинах списка
(MAPLIST <функція> <список1> ... <списокN>)
Функція MAPLIST на відміну від функції MAPCAR діє не над елементами списків, а над їх хвостовими послідовностями. Тобто спочатку дії виконуються над вхідними списками, потім – над їх CDR – елементами, і так далі поки хоча б один зі списків не буде вичерпано. Для двох вхідних списків у Ліспі ця функція може бути визначєна наступним чином:
(DEFUN MAPLIST2 (func lst1 lst2)
((OR (NULL lst1) (NULL lst2)) NIL)
(CONS (FUNCALL func lst1 lst2)
(MAPLIST2 func (CDR lst1) (CDR lst2))) )
$ (MAPLIST 'CONS '(1 2 3) '(10 11 12))
(((1 2 3) 10 11 12) ((2 3) 11 12) ((3) 12))
$ (MAPLIST 'REVERSE '(1 2 3 4))
((4 3 2 1) (4 3 2) (4 3) (4))
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021