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

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

(MAPCAN <функція> <список1> ... <списокN>)

(MAPCON <функція> <список1> ... <списокN>)

Функції MAPCAN та MAPCON є відповідно аналогами функцій MAPCAR та MAPLIST, тільки вони не будують новий список з результатів використовуючи функцію LIST, а зв’язують результати (які обов’язково повинні бути списками), використовуючи функцію NCONC.

Об’єднуючі функції можна використовувати як фільтри. Під фільтром ми будемо розуміти функцію, яка залишає або видаляє елементи, які задовольняють певній умові. Наступний приклад показує, як можна зі списку вилучити всі невід’ємні числа.

$ (MAPCAN '(LAMBDA (n) ((MINUSP n)(LIST n))) '(2 -3 3 4 -4 -5 5))

(-3 -4 -5)

Зазначимо, що наступні дії еквівалентні:

(MAPCAN f ‘(x1 x2 ... xN)) та (NCONC (f ‘x1) (f ‘x2) ... (f ‘xN))

(MAPCAN f x1 x2 ... xN) та (APPLY ‘NCONC (MAPCAR f x1 x2 ... xN))

(MAPCON f x1 x2 ... xN) та (APPLY ‘NCONC (MAPLIST f x1 x2 ... xN))

$ (MAPCON 'REVERSE '(1 2 3))

(3 2 1 3 2 3)

$ (APPLY 'NCONC (MAPLIST 'REVERSE '(1 2 3)))

(3 2 1 3 2 3)

4. Обчислення функції із загубленням результату

(MAPC <функція> <список1> ... <списокN>)

(MAPL <функція> <список1> ... <списокN>)

Функції MAPC та MAPL є відповідно аналогами функцій MAPCAR та MAPLIST, тільки вони не збирають та не об’єднують результати. Результати, що отримуються просто не зберігаються. В якості результату повертається другий аргумент функції. Ці функції використовують для отримання побочного ефекту:

$ (MAPC '(LAMBDA (u v) (SET u v)) '(a b c) '(1 2 3))

(A B C)

Після цього значенням змінних a, b, c будуть відповідно присвоєні числа 1,2 та 3.

Функції планування можна об’єднувати у більш складні структури, їх композицію можна використовувати при визначенні інших функцій. Наприклад, декартів добуток двох множин можна просто отримати за допомогою композиції двох вкладених викликів функціонала MAPCAR (справа подано результат роботи функції):

(DEFUN decart (x y) $ (decart '(q w) '(2 3 4))

(MAPCAR (((Q 2) (Q 3) (Q 4)) ((W 2) (W 3) (W 4)))

'(LAMBDA (x1)

(MAPCAR '(LAMBDA (y1) Замінимо у другому рядку функцію

(LIST x1 y1)) MAPCAR на MAPCAN, отримаємо:

y)) ((Q 2) (Q 3) (Q 4) (W 2) (W 3) (W 4))

x))

The online video editor trusted by teams to make professional video in minutes