我試圖通過另一個結構實例或其名稱來訪問結構實例的字段。由於這聽起來固然很混亂,我有一個(非常構造)例如:通過其名稱訪問結構實例
(defstruct author
(name nil)
(books '())
(years '()))
(defstruct book
(name nil)
(author '())
(copy-sold '()))
(defparameter hitchikers-guide
(make-book :name "Hitchikers-Guide"
:author '(douglas-adams)
:copy-sold '(a lot)))
(defparameter douglas-adams
(make-author :name "Douglas Adams"
:books '(Hitchikers-guide restaurant life-and-universe fish)
:years '(too few)))
(defparameter authors
'(douglas-adams pterry))
我有實例hitchikers-guide
。如果我想查找其作者的所有書籍,可以輸入REPL (author-books douglas-adams)
,我可以獲得他所有書籍的列表。不過,如果我進入
(author-books (first (book-author hitchikers-guide)))
或
(author-books (first authors))
我得到的錯誤信息:
價值道格拉斯亞當斯是預期類型的作者不是。
我做錯了嗎,還是沒有辦法以這種方式訪問這些字段?
請注意'symbol-value'只適用於這種情況,因爲變量被聲明爲特殊的,因爲它們是用'defparameter'定義的。在這種情況下,做'(defparameter作者(列表道格拉斯 - 亞當斯pterry))'是可能的,只是因爲'douglas-adams'和(可能)'pterry'已經被定義。 –