Функциональное программирование




Внутреннее представление списков. Применяющие функционалы - часть 2


или

LIST

* (list 'a '(b c)) (a (b c))

этот список представляется

Получается следующим образом:

1. Создается списочная ячейка для каждого аргумента функции

2. В car поле ставится указатель на соответствующий элемент

3. В cdr поле ставится указатель на следующую списочную ячейку


8.1.5 Переменные и списки.

Рассмотрим выражение

(setq y '(a b c))

Переменная Y будет иметь значение '(a b c)

Использование переменной , в функции обеспечивает доступ к структуре

(setq x (cons 'd y))

CONS не изменяя структуры, увеличивает список.

Если в функции присвоения список задается явно, то под него отводятся новые списочные ячейки.т.е.

(setq z '(a b c))

Переменная z будет иметь значение '(a b c)


8.1.6 EQ и EQUAL.

EQ проверяет физическое равенство списков, и EQUAL -логическое, т.е. для EQ необходимо, чтобы списки имели одинаковую стpуктуpу, а для EQUAL одинаковые элементы. (Структура списка определяется списочными ячейками).

*(setq lis1 '(a b))

* (setq lis2 '(a b))

Другая структура списка

* (setq lis3 lis1)

* (equal lis1 lis2)

t

* (equal lis1 lis3)

t

* (eql lis1 lis2)

nil

* (eql lis1 lis3)

t

* (eq lis1 lis2)

nil

* (eq lis1 lis3)

t

Однако для отдельного атома это не выполняется, т.е. новые ячейки не отводятся.

* (setq m 'abc)

* (setq n 'abc)

* (eq m n)

t


8.1.7 Cборка мусора

В результате вычислений в памяти могут возникнуть структуры, на которые нельзя ссылаться. Это происходит, когда вычисляемая структура не сохраняется с помощью setq, или когда теряются ссылки на старое значение.

Например

(setq l1 '((a) b c))

(setq l1 (cdr l1))

Для повторного использования ставшей мусором памяти в лисп системах предусмотрен специальный сборщик мусора, (garbage collector) GC, который автоматически запускается когда в памяти остается мало места.

Сборщик мусора перебирает все ячейки и собирает ставшие мусором ячейки в область свободной памяти для использования.


8.2 Обработка списков без разрушения.




Содержание  Назад  Вперед