1

構造体インスタンスのフィールドに別の構造体インスタンスまたはその名前でアクセスしようとしています。これは確かに非常に紛らわしいように聞こえるので、(非常に構成された) 例を 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 ではありません。

私は間違っているのでしょうか、それともこの方法でこれらのフィールドにアクセスする方法はありませんか?

4

3 に答える 3

5

変数にはs ではなくsauthorsが含まれています。symbolauthor

試す

(defparameter authors (list douglas-adams pterry))

代わりに (もちろん、pterry既に定義されている場合)。

同様に、はではなくの(book-author hitchikers-guide)リストです。symbolauthor

symbol-valueを使用して、対応する を取得する必要がありますauthor

于 2013-06-26T17:19:12.420 に答える