Группы пользователей Autodesk

Объединение данных в ассоциативные списки


Средства отладки Visual LISP

 

Средства отладки Visual LISP 
 

Объединение данных в ассоциативные списки



Хотя предыдущий пример работает, того же самого результата можно добиться другим, более удобным, способом. В следующем упражнении создается ассоциативный список (обрабатываемый LISP-функцией assoc). В ассоциативном списке с каждым элементом-значением связывается свой ключевой код. Ниже приведен пример ассоциативного списка:

((10 4.46207 4.62318 0.0) (11 7.66688 4.62318 0.0) (40 . 1.018248))

В этом списке ключевыми кодами являются числа 10, 11 и 40. Эти ключевые коды служат уникальным индексом списка. С помощью данного механизма AutoCAD возвращает в AutoLISP информацию об объектах, полученную при выполнении программы. Код 10 обозначает начальную точку, код 11 обычно используется для конечной точки.

В чем преимущество использования ассоциативного списка? В отличие от обычного списка, порядок значений в нем не играет никакой роли. Еще раз рассмотрим первый список:

((4.46207 4.62318 0.0) (7.66688 4.62318 0.0) 0.509124)

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

В ассоциативном списке порядок следования значений не важен. Даже при изменении порядка элементы ассоциативного списка всегда можно идентифицировать. Например, код 11 обозначает конечную точку вне зависимости от того, где она располагается в общем списке.

((11 7.66688 4.62318 0.0) ; order of list

(40 . 1.018248) ; has been

(10 4.46207 4.62318 0.0)) ; modified

Темы:

Применение ассоциативных списков

Сохранение результата функции gp:getPointInput в переменной ї

 



Содержание раздела