- •Часть 1
- •Введение
- •1. Основы программирования на языке Лисп
- •1.1 Представление данных в Лиспе
- •1.2 Лямбда-исчисление и функциональное программирование
- •1.3 Пример простейшей программы на языке Лисп
- •2. Функции Лиспа
- •2.1 Функции отбора
- •2.2. Функции конструктора.
- •2.3 Функции компаратора.
- •2.4 Функции распознавателя.
- •2.5 Функции назначения.
- •2.6 Логические функции
- •2.7 Числовые функции
- •Задания к лабораторным работам по языку программирования лисп
- •Часть 1
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)