通用 Lisp/参考/defstruct
外观
defstruct 构造声明了一个新的用户定义数据类型,该类型具有固定数量的命名组件。它还创建结构构造函数。
以下示例[1] 声明了一个带有符号 point 的 Lisp 结构,以及三个由符号 x、y 和 z 引用的槽。这里的构造函数名为 make-point。
(defstruct point x y z) ; define structure
(defvar my-point) ; define var
(setf my-point (make-point :x 3 :y 4 :z 12)) ; set value of slots of var
(point-x my-point) ; access to slots
;; объявление и инициализация структуры (initiating of structure)
(defstruct 3dpoint (x 0) (y 0) (z 0));
;; обязательно превращем все это в динамическую переменную
(defvar *my-points* (make-array '(1000000) :element-type '3dpoint))
;; получение случайного числа (get random number from interval)
(defun random-from-range (start end)
(+ start (random (+ 1 (- end start)))))
;; функция заполнения массива структур (set values in array of structures)
(defun setf-my-points (*my-points*)
(declare (special *my-points*))
(loop for i from 1 to 1000000 do
(progn
(print i)
(setf (aref *my-points* i)
(make-3dpoint :x (random-from-range 1 100)
:y (random-from-range 100 200)
:z (random-from-range 300 400)))
)
)
)
;; заполняем случайными значениями 1 (call function that set value in array of structures)
(print (time (setf-my-points *my-points*)))
;; получаем доступ к случайному значению (1 1000000) access to random ID record
(3dpoint-x (aref *my-points* (random-from-range 1 1000000)))
;; смотрим время доступа... (see time)
(print (time (3dpoint-x (aref *my-points* (random-from-range 1 1000000)))))
- defclass
- s# 宏