構造体インスタンスのフィールドに別の構造体インスタンスまたはその名前でアクセスしようとしています。これは確かに非常に紛らわしいように聞こえるので、(非常に構成された) 例を 1 つ示します。
(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))
エラーメッセージが表示されます:
値 DOUGLAS-ADAMS は、予期されたタイプの AUTHOR ではありません。
私は間違っているのでしょうか、それともこの方法でこれらのフィールドにアクセスする方法はありませんか?