1. Точечная нотация.

В Лиспе существует понятие точечной пары. Название точечной пары происходит из использованной в ее записи точечной нотации, в которой для разделения полей CAR и CDR используется выделенная пробелами точка. Базовые функции CAR и CDR действуют совершенно симметрично.


_(CONS ‘a ‘d) р (a . d)

_(CAR ‘(a . b)) р a

_(CDR ‘(a . (b . c))) р (b . c)


Любой список можно записать в точечной нотации. Преобразование можно осуществить (на всех уровнях списка) следующим образом:

(a1 a2 ... an) у (a1 . (a2 . ...(an . nil)... ))


_(a b c (d e)) у (a . (b . (c . ((d . (e . nil)) . nil))))


Признаком списка здесь служит NIL в поле CDR последнего элемента списка, символизирующий его окончание.

Использование точечных пар в программировании на Лиспе в общем-то излишне. Точечные пары применяются в теории, книгах и справочниках по Лиспу. Кроме того они используются совместно с некоторыми типами данных и с ассоциативными списками, а также в системном программировании.


2. Структурированные типы данных.

Списки (ассоциативные).

Ассоциативный список или просто а-список - состоит из точечных пар, поэтому его также называют списком пар.

((a1 . t1) (a2 . t2) ... (an . tn))


Первый элемент пары называют ключом а второй - связанными с ключом данными. Обычно ключом является символ. связанные с ним данные могут быть символами, списками или какими не будь другими лисповскими объектами.

В работе со списками пар нужно уметь строить списки, искать данные по ключу и обновлять их.

PAIRLIS.

Функция PAIRLIS строит а-список из списка ключей и списка, сформированного из соответствующих им данных. Третьим аргументом является старый а-список, в начало которого добавляются новые пары:

(PAIRLIS ключи данные а-список)


_(SETQ спис ‘(один . Иванов)) р (один . Иванов)

_(SETQ спис

(PAIRLIS ‘(три два) ‘(Петров Сидоров)

спис)) р ((три . Петров) (два . Сидоров) (один . Иванов))


ASSOC.

Ассоциативный список можно считать отображением из множества ключей в множество значений. Данные можно получить с помощью функции

(ASSOC ключ а-список)


которая ищет в списке пар данные, соответствующие ключу, сравнивая искомый ключ с ключами пар слева направо.


_(ASSOC ‘три спис) р (три . Петров)


ACONS.

Ассоциативный список можно обновлять и использовать в режиме стека. Новые пары добавляются к нему только в начало списка, хотя в списке уже могут быть данные с тем же ключом. Это осуществляется функцией ACONS:

(ACONS x y а-список)

Поскольку ASSOC просматривает список слева направо и доходит лишь до первой пары с искомым ключом, то более старые пары как бы остаются в тени более новых.


Строки.

Строка состоит из последовательности знаков. В строке знаки записываются в последовательности друг за другом, для ограничения которой с обеих сторон в качестве ограничителя используется знак «».

При вводе строки в интерпретаторе, в качестве результата получаем ту же строку.

CHAR.

Произвольный элемент строки можно прочитать (т. е. сослаться на него с помощью индекса) функцией CHAR:

(CHAR строка n)


(CHAR «строка» 0) р \с ;индексация начинается с 0


Сравнение строк.


(STRING= строка1 строка2)

(STRING< строка1 строка2)

(STRING> строка1 строка2)

(STRING/= строка1 строка2)


Массивы.

Для работы с массивами в MuLisp необходимо загрузить файл ARRAY.LSP.

Массивы создаются формой:

(MAKE-ARRAY (n1 n2 ... nN) режимы)


Функция возвращает в качестве значения новый объект - массив. n1, n2, ... nN - целые числа, их количество N отражает размерность массива, а значения - размер по каждой размерности. Необязательными аргументами можно задать тип элементов массива, указать их начальные значения или придать самому массиву динамический размер. Общий размер массива в этом случае знать и закреплять не обязательно.

Для вычислений, осуществляемых с массивами, наряду с функцией создания массива используются функции для выборки и изменения элементов массива. Ссылка на элемент N-мерного массива осуществляется с помощью вызова:

(ARREF массив n1 n2 ...nN)


n1, n2, ..., nN - координаты, или индексы, элемента, на который ссылаются. В качестве функции присваивания используется обобщенная функция присваивания SETF.


_(SETQ мас (MAKE-ARRAY ‘(5 4)

:ELEMENT-TYPE ‘ATOM

:INITIAL-ELEMENT A)) р (ARRAY ((A A A A) ... (A A A A) (5 6)))

_(SETF (AREF мас 0 1) B) р B

_мас р (ARRAY ((A B A A) ... (A A A A )))


Структуры.

Для объединения основных типов данных (чисел, символов, строк, массивов) в комплексы, отображающие предметы, факты используется составной тип, который называется структурами.

Определение структурного типа осуществляется с помощью макроса DEFSTRUCT, формой которого является


(DEFSTRUCT класс-структур

поле1

поле2

...)


Определим структурный тип БАЗА состоящий из компонент ПРОФИЛЬ, ПЛОЩ и ВМЕСТИМ:


_(DEFSTRUCT база

профиль площ вместим) р БАЗА


Для каждого нового типа данных генерируется начинающаяся с MAKE- функция создания структуры данного типа. Например объект типа БАЗА можно создать и присвоить переменной БАЗА1 следующим вызовом:


_(SETQ БАЗА1 (MAKE-БАЗА))


Полю с помощью ключевого слова, которым является имя поля с двоеточием перед ним, присвоить при создании начальное значение.

Вызов MAKE-БАЗА возвращает в качестве значения созданную структуру.

Для копирования структуры генерируется функция, начинающаяся с COPY- (COPY-БАЗА).

Для каждого поля определяемой структуры создается функция доступа, имя которой образуется написанием после имени типа через тире имени поля, например:


_(БАЗА-ПРОФИЛЬ x)


Вызов возвращает значение поля ПРОФИЛЬ для БАЗЫ, задаваемой структурой x.

Для присваивания значений полям структуры используется обобщенная функция присваивания SETF:


_(SETF (БАЗА-ПРОФИЛЬ БАЗА1) ОВОЩ) р ОВОЩ



Информация о работе «ЛИСП»
Раздел: Информатика, программирование
Количество знаков с пробелами: 170298
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
14593
2
12

... цифр с требуемым числом разрядов и, таким образом, запомнить любое самое большое число данной разрядности. Целью данной курсовой работы является ЛИСП-реализация конечных автоматов.1. Постановка задачи Конечный автомат – автомат, проверяющий допустимость слова на ленте, и возвращающий True / False (в данном случае Correct / Incorrect). Конечный автомат может двигаться по ленте только в одном ...

Скачать
16057
6
13

... При работе пользователя с базой данных над ее содержимым выполняются следующие основные операции: выбор, добавление, модификация (замена) и удаление данных. Целью данной курсовой работы является ЛИСП – реализация основных операций над базами данных. 1 Постановка задачи Требуется разработать программу, реализующую основные операции над базами данных: выбор, добавление, модификация и удаление ...

Скачать
14282
0
14

... новых рынков, биржевой игре, оценки политических рейтингов, выборе оптимальной ценовой стратегии и т.п. Появились и коммерческие системы массового применения. Целью данной курсовой работы является ЛИСП – реализация основных операций над нечеткими множествами. 1.Постановка задачи Требуется реализовать основные операции над нечеткими множествами: 1)   содержание; 2)   равенство; 3)   ...

Скачать
11806
0
10

... метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов. Целью данной курсовой работы является Лисп – реализация нахождения корней уравнения методом Ньютона. 1. Постановка задачи Дано уравнение: . Требуется решить это уравнение, точнее, найти один из его корней (предполагается, что ...

0 комментариев


Наверх