Б. Л. Файфель - Очень краткое введение в язык Лисп
Название: | Очень краткое введение в язык Лисп | |
Автор: | Б. Л. Файфель | |
Жанр: | Самиздат, сетевая литература, Литература ХXI века (эпоха Глобализации экономики), Lisp, Scheme | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Очень краткое введение в язык Лисп"
Аннотация к этой книге отсутствует.
Читаем онлайн "Очень краткое введение в язык Лисп". [Страница - 27]
второго
параметра значение второго параметра замещает список свойств атома, заданного
первым параметром. При этом стандартные флаги не создаются и не замещаются. Вот
примеры вызова функции SPROPL:
(spropl 'a1 '(q w e r t y))
==> (q w e r T y)
(proplist 'a1)
==> (q w e r T y)
(spropl 2 '(a b c))
==> (a b c)
(proplist 2)
==> (FIXED a b c)
(+ 2 2)
==> 4
В первом примере у атома a1 устанавливается список свойств (q w e r t y). Последующий
вызов функции PROPLIST показывает, что список успешно установлен. В следующем
примере делается попытка установить список свойств у атома 2. И попытка оказывается
успешной: последующий вызов PROPLIST показывает, что у атома 2 список свойств
изменился. Стандартный флаг FIXED при этом никуда не делся, - как было отмечено
выше, стандартные флаги неуничтожимы. Пусть читатель приведет еще какой-нибудь
язык программирования, в котором у двойки могут быть еще какие-либо свойства!
(Разве что Forth. Может быть, и до него доберемся...) Кстати, наличие списка свойств
нисколько не мешает арифметике - последний пример это подтверждает: 2 + 2 попрежнему 4.
Список свойств атома может иметь сколь угодно сложную структуру, однако обычно он
является одноуровневым списком.
В принципе двух описанных функций (PROPLIST и SPROPL) достаточно для любых
манипуляций со списками свойств. При необходимости другие функции можно
реализовать на Лиспе (см. PUTFLAG, PUTPROP, FLAG, FLAGP).
Важное замечание
Совершенно естественным применением списков свойств могло бы быть моделирование
математических объектов (рациональные числа, векторы, матрицы и т.д.). К сожалению,
использование списков свойств здесь не так удобно, как может показаться на первый
взгляд. Проблема состоит в том, что каждый атом в Лиспе уникален, соответственно
уникален и список его свойств. А вот значения атома зависят от контекста
вычислений. Если некий атом используется как локальная переменная, то его значение
при выходе из PROG-конструкции восстановится. Но если внутри PROG-конструкции у
этого атома модифицировался список свойств, то этот список свойств не
изменитсяпри выходе из PROG. Подобная ситуация совершенно недопустима, поэтому в
главе, посвященной приемам программирования на Лиспе, признаки создаваемых
объектов (массивов, рациональных чисел и т.д.) хранятся в общем списке с данными,
составляющими сущность моделируемого объекта.
--">
параметра значение второго параметра замещает список свойств атома, заданного
первым параметром. При этом стандартные флаги не создаются и не замещаются. Вот
примеры вызова функции SPROPL:
(spropl 'a1 '(q w e r t y))
==> (q w e r T y)
(proplist 'a1)
==> (q w e r T y)
(spropl 2 '(a b c))
==> (a b c)
(proplist 2)
==> (FIXED a b c)
(+ 2 2)
==> 4
В первом примере у атома a1 устанавливается список свойств (q w e r t y). Последующий
вызов функции PROPLIST показывает, что список успешно установлен. В следующем
примере делается попытка установить список свойств у атома 2. И попытка оказывается
успешной: последующий вызов PROPLIST показывает, что у атома 2 список свойств
изменился. Стандартный флаг FIXED при этом никуда не делся, - как было отмечено
выше, стандартные флаги неуничтожимы. Пусть читатель приведет еще какой-нибудь
язык программирования, в котором у двойки могут быть еще какие-либо свойства!
(Разве что Forth. Может быть, и до него доберемся...) Кстати, наличие списка свойств
нисколько не мешает арифметике - последний пример это подтверждает: 2 + 2 попрежнему 4.
Список свойств атома может иметь сколь угодно сложную структуру, однако обычно он
является одноуровневым списком.
В принципе двух описанных функций (PROPLIST и SPROPL) достаточно для любых
манипуляций со списками свойств. При необходимости другие функции можно
реализовать на Лиспе (см. PUTFLAG, PUTPROP, FLAG, FLAGP).
Важное замечание
Совершенно естественным применением списков свойств могло бы быть моделирование
математических объектов (рациональные числа, векторы, матрицы и т.д.). К сожалению,
использование списков свойств здесь не так удобно, как может показаться на первый
взгляд. Проблема состоит в том, что каждый атом в Лиспе уникален, соответственно
уникален и список его свойств. А вот значения атома зависят от контекста
вычислений. Если некий атом используется как локальная переменная, то его значение
при выходе из PROG-конструкции восстановится. Но если внутри PROG-конструкции у
этого атома модифицировался список свойств, то этот список свойств не
изменитсяпри выходе из PROG. Подобная ситуация совершенно недопустима, поэтому в
главе, посвященной приемам программирования на Лиспе, признаки создаваемых
объектов (массивов, рациональных чисел и т.д.) хранятся в общем списке с данными,
составляющими сущность моделируемого объекта.
--">