Породження комбінаторних об’єктів, Детальна інформація

Породження комбінаторних об’єктів
Тип документу: Реферат
Сторінок: 7
Предмет: Комп`ютерні науки
Автор: Олексій
Розмір: 12.8
Скачувань: 916
(DEFMACRO <ім’я> <лямбда список> <тіло>)

e

\x00F0

-

J

L

¤

\x00AA

n

e

i

9 відбувається обчислення тіла з аргументами (як і для функції). Цей етап називається розширенням або розкриттям макроса. На другому етапі обчислюється розкрита форма, значення якої повертається в якості значення всього макровиклику. Визначимо макрос PUSH1, який працює як відома нам функція PUSH (в дійсності PUSH є вмонтованим в середовище Лісп макросом).

$ (DEFMACRO PUSH1 (x y) $ (SETQ ‘a ‘(1 2 3)) (PUSH1 6 ‘a)

(LIST 'SETQ y (LIST 'CONS x y))) після чого a = (6 1 2 3)

Визначимо деяку функцію P, тілом якої є макрос PUSH1:

(DEFUN p (x y)

(PUSH1 x y))

Тепер за допомогою команди (GETD p) можна побачити, який вигляд має функця p:

(LAMBDA (X Y) (SETQ Y (CONS X Y)))

При програмуванні розкритого макроса явно не видно, тому для їх тестування існує спеціальна функція – MACROEXPAND, яка здійснює тільки розкриття макроса. Повертається макророзширення виклику, яке можна вивчати.

$ (MACROEXPAND '(PUSH1 6 s))

(SETQ S (CONS 6 S))

CADR-елементом визначення функції є або список формальних аргументів, або ім’я формального аргументу. Функція, яка визначена за допомогою списку формальних аргументів, в тому числі і порожнього, називається розгорнутою. При виклику такої функції фактичні аргументи прив’язуються відповідно до формальних аргументів.

Функція, яка визначена за допомогою імені формального аргумента, називається нерозгорнутою. Якщо викликається така функція, список фактичних аргументів пов’язується з іменем формального аргумента. Отже нерозгорнуті функції допускають будь-які імена фактичних аргументів.

CDDR-елементом визначення функції є список форм, який називається тілом функції. Після того як формальні аргументи функції були прив’язані з її фактичними, починає працювати неявна функція PROGN, яка обчислює тіло функції. Після обчислення тіла функції формальні аргументи знову приймають свої вихідні значення, а результат обчислення тіла функції видається як значення функції.

1. FUNCALL (<функція> ... )

Виконуються дії функції <функція> над аргументами та повертається результат. <Функція> повинна бути або іменем обчислюваної функції, або тілом LAMBDA. Якщо <функція> — це ім’я макро або невизначеної функції, виникає переривання по помилці <невизначена функція>.

$ (FUNCALL ‘CONS ‘a ‘(b c d)) $ (FUNCALL ‘(LAMBDA (n) (* n n)) 5)

(a b c d) 25

2. EVAL <об’єкт>

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