Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Лисп Мурашко ИА, Марина ИМ, БГУИР 2002 (Мет пособие).doc
Скачиваний:
55
Добавлен:
15.06.2014
Размер:
289.28 Кб
Скачать

2.4 Функции распознавателя.

1) Функция SYMBOLP [object]. Если <объект> есть символ, Функция возвращает Т, в противном случае - NIL.

(SYMBOL 'DOG) --> T

(SYMBOL 100) --> NIL

(SYMBOL 4.25) --> NIL

(SYMBOL '(A B C)) --> NIL

2) Функция INTEGERP [object] Если <объект> - целое число, функция возвращает Т, иначе - NIL.

(INTEGERP 'DOG) --> NIL

(INTEGERP 1000) --> T

(INTEGERP 4.23) --> NIL

3) Функция NUMBERP [object] Если <объект> есть число - целое или дробное, функция возвращает Т, иначе - NIL.

(NUMBER 'DOG) --> NIL

(NUMBER 100) --> T

(NUMBER 4.235) --> T

(NUMBER '(A B C)) --> NIL

4) Функция ATOM [object] Если <объект> есть атом - символ или число, функция возвращает Т, иначе - NIL.

(ATOM 'DOG) --> T

(ATOM 100) --> T

(ATOM '(A B C)) --> NIL

(ATOM NIL) --> T

2.5 Функции назначения.

1) Функция SET [symbol, object] замещает элемент значения <символа> на указатель на <объект> и возвращает <объект>. Если <символ> не является символом, то SET генерирует прерывание по ошибке "Несимвольный аргумент".

RPLACA и SET идентичны. Однако RPLACA возвращает свой первый аргумент, а SET - второй. Кaк правило, SET используют в том случае, когда ее 1-й аргумент - символ, а RPLACA - тогда, когда ее 1-й аргумент - cons.

(SET 'FOO '(A B C))--> (A B C)

FOO --> (A B C)

(SET 'PET 'DOG) --> DOG

(SET PET 'ROVER) --> ROVER

DOG --> ROVER

PET --> DOG

2) Функция SETQ [symbol1,form1,..., symbolN,formN] оценивает <форму>, принимает за результат значение <символа> и возвращает результат. Отметим, что SETQ - это специальная форма и что <символ> не оценивается. Если <символ> не является символом, то SETQ генерирует прерывание по ошибке "Несимвольный аргумент".

Если SETQ задана более, чем с 2-мя аргументами, оценка форм и задание значений осуществляется последовательно. Если задано нечетное количество аргументов, то последний символ принимается за NIL. SETQ возвращает новое значение последнего задаваемого символа.

(SETQ FOO '(D E F)) --> (D E F)

FOO --> (D E F)

(SETQ FOO (CDR FOO)) --> (E F)

FOO --> (E F)

(SETQ SUM 5) --> 5

(SETQ SUM (+3 4) SQR (* SUM SUM)) --> 49

SUM --> 7

SQR --> 49

3) Функция POP [symbol] возвращает "верхушку" (т.е. car) "стека" (т.е. списка), который называется <символ>, и заменяет значение <символа> на оставшуюся часть (т.е. cdr) стека. Если <символ> не является символом, то возникает прерывание по ошибке "Несимвольный аргумент". Если значение <символа> - не cons, POP возвращает NIL.

Данная специальная форма - это LISP-аналог выражения на машинном языке, предназначенного для выборки информации из "верхушки" стека.

(SETQ STACK-LIST '(A B C D E F)) --> (A B C D E F)

(POP STACK-LIST) --> A

(POP STACK-LIST)--> B

(POP STACK-LIST)--> C

STACK-LIST --> (D E F)

4) Функция PUSH [form,symbol] оценивает <форму>, "проталкивает" результат в стек (т.е. в <символ>) и заменяет значение <символа> на увеличенный стек. PUSH возвращает увеличенный стек (т.е. список). Если <символ> не является символом, возникает прерывание по ошибке "Несимвольный аргумент".

Данная специальная форма - это LISP-аналог выражения на машинном языке, предназначенного для размещения информации в "верхушке" стека.

(SETQ STACK-LIST NIL)--> NIL

(PUSH 'A STACK-LIST)--> (A)

(PUSH 'B STACK-LIST) --> (B A)

(PUSH 'C STACK-LIST) --> (C B A)

STACK-LIST --> (C B A)