Лисп/Типы данных: различия между версиями

Содержимое удалено Содержимое добавлено
добавил тип данных - точечная пара.
отформатировал
Строка 30:
 
'''Точечная пара''' (она же "точечный список") - структура, состоящая из двух элементов, разделенных точкой. Выглядит это примерно так:
1. (1 . 2),
2. (('a 'b) . 3),
3. ('a . (4 . 9)),
4. ('a . nil) и т.д.
Первый элемент точечной пары называется головой, второй элемент хвостом.
Конструировать точечные пары можно при помощи функции cons, у которой всего два аргумента - голова и хвост будущей точечной пары. Например, вызов (cons 1 2) создаст точечную пару (1 . 2). Функция cons не создает список, путем присоединения головы списка к ее хвосту, как пишут во многих учебниках и интернетах.
 
Как видно из примеров конструировать можно точечные пары, элементами которых являются точечные пары. Рассмотрим третий пример: ('a . (4 . 9)). Как правило такие точечные пары записывают в более простом виде ('a 4 . 9). Как видно, это выражение очень сильно напоминает известную нам структуру - список. Собственно, список и есть структура, состоящая из точечных пар. Если хвостовой элемент точечной пары nil, то, для краткости записи точка опускается и, например, из примера 4 получаем ('a). Что это? Правильно - список, состоящий из одного элемента.
Как видно из примеров конструировать можно точечные пары, элементами которых являются точечные пары. Рассмотрим третий пример:
Аналогично и с примером 3: если, скажем, у нас вместо 9 будет nil - ('a . (4 . nil)), то, для краткости избавляясь от скобочек получим ('a 4 . nil), а для еще более краткой записи и опустим точку с nil: ('a 4). Наша точечная пара приобрела вид списка из двух элементов.
('a . (4 . 9)).
Как правило такие точечные пары записывают в более простом виде
('a 4 . 9).
Как видно из примеров конструировать можно точечные пары, элементами которых являются точечные пары. Рассмотрим третий пример: ('a . (4 . 9)). Как правило такие точечные пары записывают в более простом виде ('a 4 . 9). Как видно, это выражение очень сильно напоминает известную нам структуру - список. Собственно, список и есть структура, состоящая из точечных пар. Если хвостовой элемент точечной пары nil, то, для краткости записи точка опускается и, например, из примера 4 получаем ('a). Что это? Правильно - список, состоящий из одного элемента.
Аналогично и с примером 3: если, скажем, у нас вместо 9 будет nil:
('a . (4 . nil))
то, для краткости избавляясь от скобочек получим
('a 4 . nil)
а для еще более краткой записи и опустим точку с nil:
('a 4)
Наша точечная пара приобрела вид списка из двух элементов.
Например такая сложная пара (1 . (2 . (3 . (4 . nil)))) после всех проделанных последовательных упрощений записи (предлагаю читателю этим заняться самостоятельно), приобретет вид простенького списка (1 2 3 4).
 
И наоборот, можно любой список представить в виде точечной пары:
(1 2 (3 4) 5) -> (1 . (2 . ((3 . (4 . nil)) . (5 . nil))))
 
[[Категория:Лисп|Типы данных]]