Функції планування, Детальна інформація

Функції планування
Тип документу: Реферат
Сторінок: 5
Предмет: Комп`ютерні науки
Автор: Олексій
Розмір: 8.1
Скачувань: 973
Реферат на тему:

Функції планування

Функції планування, або 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