在常见的lisp我注意到我可以这样写:
(defun foo (&key (a 1) (b 2) (c (+ a b))) (print (+ a b c)))
当我打电话时(foo)
,6
打印出来.所以参数c
可以引用为a
和设置的值b
.但我似乎找不到办法做类似的事情defstruct
.就像是:
CL-USER> (defstruct thing a b c) THING CL-USER> (setq q (make-thing :a 1 :b 2 :c (+ a b))) ; Evaluation aborted CL-USER> (setq q (make-thing :a 1 :b 2 :c (+ :a :b))) ; Evaluation aborted
有没有办法做到这一点?
您可以使用:constructor
选项执行此操作defstruct
.
CL-USER> (defstruct (thing (:constructor make-thing (&key a b (c (+ a b))))) a b c) THING CL-USER> (make-thing :a 1 :b 2) #S(THING :A 1 :B 2 :C 3)
有关详细信息,请参阅CLHS条目defstruct
.