gpt4 book ai didi

common-lisp - 我可以在 defstruct 中引用其他插槽吗?

转载 作者:行者123 更新时间:2023-12-04 02:32:58 25 4
gpt4 key购买 nike

在普通的 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)

有关详细信息,请参阅 defstruct 的 CLHS 条目.

关于common-lisp - 我可以在 defstruct 中引用其他插槽吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/525815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com