在Common Lisp中,我可以使用什么来访问结构体槽位(slot)并使用槽位名称/符号(slot name/symbol)进行操作?
我的要求是:
我的要求是:
(defstruct point (x 0) (y 0))
(defmacro -> (struct slot) `(slot-value ,struct ,slot))
(setf p (make-point))
(setf (slot-value p 'x) 1)
(setf (-> p 'y) 2)
我正在使用Clozure CL,而在Clozure CL中这是有效的。然而,据我所知,这是非标准行为(相当于C ++中的“未定义行为”)。我不打算切换到另一个CL实现,那么我应该继续使用 slot-value
来处理结构体,还是有更好的方法来处理它?
point p; p.x = 0;
。因此,我想要更短的语法。我定义了“->”宏,但发现“slot-value”不应该用于结构体(尽管在许多实现中它可以工作)。这就是为什么我提出了这个问题的原因。 - SigTerm