Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по языку ЛИСП.doc
Скачиваний:
111
Добавлен:
28.06.2014
Размер:
210.94 Кб
Скачать

8.14 Функции свойств

Функции предназначены для работы свойствами, связанными с

символами. CDR-элемент символа указывает на список

свойств, содержащий свойства и флаги.

Список свойств - это ассоциативный список вида (S1

S2...Sn), где Si - либо свойство,либо флаг. Свойство име-

ет вид (P.V). P - имя свойства, V - значение свойства.

Флаг - это просто атом, который либо есть в списке либо

отсутствует.

Функции работы со свойствами и флагами облегчают процесс

построения динамических баз данных, из которых информация

может легко и быстро выбираться.

(PUT symbol P V)

PUT - помещает в список свойств symbol свойство P со зна-

чением V. В качестве значения выдает V.

(PUT 'USA 'CAPITAL 'WASHINGTON) --> WASHINGTON

(PUT 'FRANCE 'CAPITAL 'PARIS) --> PARIS

(PUT 'JAPAN 'CAPITAL 'TOKYO) --> TOKYO

(GET symbol P)

GET - возвращает значение свойства P из списка свойств

symbol. Если такого свойства не существует, GET возвраща-

ет NIL. В приведенном ниже примере предполагается, что

- 35 -

была выполнена команда PUT из предыдущего примера.

(GET 'FRANCE 'CAPITAL) --> PARIS

(GET 'USA 'CAPITAL) --> WASHINGTON

(GET 'AUSTRIA 'CAPITAL) --> NIL

(REMPROP symbol P)

REMPROP - удаляет из списка свойств symbol свойство P.

REMPROP возвращает старое значение свойства, если оно

найдено, в противном случае - NIL. В примере предполага-

ется наличие списка свойств из приведенного выше примера.

(REMPROP 'USA 'CAPITAL) --> WASHINGTON

(GET 'FRANCE 'CAPITAL) --> PARIS

(GET 'USA 'CAPITAL) --> NIL

8.15 Контрольные конструкции

(PROGN form1 form2 ... formN)

PROGN - последовательно вычисляет формы, начиная с form1,

и выдает значение последней вычисленной формы.

(PROGN (SETQ NUM1 (+ 2 5))

(SETQ NUM2 (* 3 4))

(+ NUM1 NUM2)

) --> 19

(LOOP form1 form2 ... formN)

LOOP - в цикле последовательно вычисляет формы до тех

пор, пока не встретится неявный оператор COND с предика-

том, не равным NIL. LOOP вычисляет тело неявного операто-

ра COND и возвращает результат.

(SETQ NUM 5)

(LOOP ((ZEROP NUM))

(PRIN1 NUM)

(SPACES 2)

(PRINT (* NUM NUM))

(DECQ NUM)

) -->

- 36 -

5 25

4 16

3 9

2 4

1 1

T

(PROG1 form1 form2 ... formN)

PROG1 - вычисляет form1 и затем - оставшиеся формы, ис-

пользуя неявный PROGN. Возвращает в результате вычисления

значение form1. PROG1 часто используют для того, чтобы не

вводить временные переменные для хранения результатов в

процессе вычисления других выражений.

(SETQ FOO '(A B C D)) --> (A B C D)

(PROG1 (CAR FOO) (SETQ FOO (CDR FOO))) --> A

FOO --> (B C D)

(IF predicate thenform elseform)

Если значение <предиката> - не NIL, то в качестве значе-

ния функции IF вычисляется и выдается значение thenform.

В противном случае - elseform или NIL, если elseform от-

сутствует.

Специальная форма IF в LISP аналогична конструкции

"if-then -else" в других языках.

(IF (EQ (* 2 3) 6) 'TRUE 'FALSE) --> TRUE

(IF (EQ (+ 2 3) 6) 'TRUE 'FALSE) --> FALSE

(COND cond1 cond2 ... condN)

COND - вычисляет car каждой cond-формы (т.е. предиката)

до тех пор, пока не встретится какое-либо значение, от-

личное от NIL, либо пока все предикаты не будут вычисле-

ны. В первом случае COND вычисляет cdr-элемент cons-формы

с предикатом, отличным от NIL, как тело функции, исполь-

зуя неявную функцию PROGN. Если cdr-элемент cond-формы,

не равной NIL, пуст, то COND возвращает значение предика-

та. Если все предикаты были вычислены и все возвратили

NIL, то COND выдает NIL.

- 37 -

(SETQ NUM -3) --> -3

(SETQ SIGN 1

(COND ((PLUSP NUM) 'POSITIVE)

((MINUSP NUM) 'NEGATIVE)

((ZEROP NUM) 'ZERO)

(t ('NONNUMBER))

) --> NEGATIVE

8.16 Функции управления памятью

(RECLAIM) управляет работой сборщика мусора, исправляя не-

корректные структуры данных для четырех областей данных muLISP.

Если требуется, выполняется также перераспределение памяти.

Возвращается итоговое число байтов,доступных под области ато-

мов, векторов, указателей и стековые области.

.

- 38 -

ЛИТЕРАТУРА

1. McCarthy J. Lisp 1.5 Programming manual. MIT-Press,

1962.

2. Маурер У. Введение в программирование на языке ЛИСП.

Пер. с англ. - М.: Мир, 1976.

3. Семенова Е.Т. Язык программирования ЛИСП 1.5 - М.:

МЭИ, 1977.

4. Reference Manual muLISP-90: LISP Language Programming

Environment, 3-d Edition., July 1990, SoftWarehouse Inc.,

Honolulu, Hawaii, USA.

5. Э.Хювенен, Й.Сеппянен Мир Лиспа(в 2-х томах). - М.:

МИР, 1990.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ ............................................... 3

1. ОСНОВНЫЕ ПРИНЦИПЫ РАБОТЫ В СИСТЕМЕ muLISP............ 3

2. ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ В СИСТЕМЕ muLISP........ 6

3. СООБЩЕНИЯ О ПРЕРЫВАНИИ РАБОТЫ ИНТЕРПРЕТАТОРА......... 8

4. СООБЩЕНИЯ ОБ ОШИБКАХ........................ ........ 9

5. РЕДАКТИРОВАНИЕ ТЕКСТОВ ПРОГРАММ И ЗАГРУЗКА........... 10

ИСХОДНЫХ ТЕКСТОВЫХ ФАЙЛОВ

6. ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА............................. 13

7. ОТЛАДКА ПРОГРАММ..................................... 15

8. ОПИСАНИЕ НАИБОЛЕЕ ИСПОЛЬЗУЕМЫХ ФУНКЦИЙ ЯЗЫКА......... 17

8.1. Функции выборки................................... 17

8.2. Конструирующие функции............................ 18

8.3 Функции распознавания............................. 20

8.4. Функции сравнения................................. 21

8.5. Логические функции................................ 22

8.6. Функции присваивания.............................. 23

8.7. Примитивы определения функций..................... 24

8.8. Арифметические функции............................ 25

8.9. Функционалы....................................... 26

8.10. Функции ввода..................................... 28

8.11. Функции вывода.................................... 30

8.12. Функции работы со строками........................ 32

8.13. Работа со стеком.................................. 33

8.14. Функции свойств................................... 34

8.15. Контрольные конструкции........................... 35

8.16. Функции управления памятью........................ 37

ЛИТЕРАТУРА ............................................. 38

СОДЕРЖАНИЕ.............................................. 39

В.В.Байдун,С.И.Кружилов,А.Е.Сергиевский,П.Л.Чернов

Редактор Е.Т.Семенова

Лабораторный практикум

по курсу

"Программирование и алгоритмические языки"

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ЛИСП В СИСТЕМЕ muLISP-90

(Кафедра Прикладной математики)

Технический редактор

Корректор

________________________________________________________

Темплан издания МЭИ 1993 г., поз.69 (метод)

Подписано к печати

Формат бумаги 60x84/16

Печ.л. Уч.-изд.л.

Тираж Заказ Бесплатно

________________________________________________________

Типография МЭИ, ротапринт, Красноказарменная, 13