連想リストふたたび

9章4節。
連想リストをネストさせて簡易データベースを作ろう、と。
データベースとは、

データベース = ((アイテム1 . アイテム1の性質) (アイテム2 . アイテム2の性質) ・・・ (アイテムn . アイテムnの性質))
アイテムの性質 = ((属性1 . ) (属性2 . 値2) ・・・ (属性n . 値n))

という格好をしているとする。


話題の核心に入る前にさっそくつまずいた。
っていうのも、例示してある

(define *item-detabase*
  '((potion (drink . #t) (throw . #t))
    (elixir (drink . #t) (throw . #t))
    (pancake (eat . #t) (throw . #t))
    (cookie (eat . #t) (throw . #t))
    (dagger (throw . #t))))

が、上で述べたデータベースの構造にマッチしているとは、すぐには理解できなかった。
だもんで、自分で

gosh> (define *potion-attr* '((drink . #t) (throw . #t)))
*potion-attr*
gosh> (define *elixir-attr* '((drink . #t) (throw . #t)))
*elixir-attr*
gosh> (define *pancake-attr* '((eat . #t) (throw . #t)))
*pancake-attr*
gosh> (define *cookie-attr* '((eat . #t) (throw . #t)))
*cookie-attr*
gosh> (define *dagger-attr* '((throw . #t)))
*dragger-attr*
gosh> (define *item-database*
        (list
          (list* 'potion *potion-attr*)
          (list* 'elixir *elixir-attr*)
          (list* 'pancake *pancake-attr*)
          (list* 'cookie *cookie-attr*)
          (list* 'dagger *dagger-attr*)))
*item-database*
gosh> *item-database*
((potion (drink . #t) (throw . #t)) (elixir (drink . #t) (throw . #t)) (pancake (eat . #t) (throw . #t)) (cookie (eat . #t) (throw . #t)) (dagger (throw . #t)))

って性質を表す連想リストを別個に作ってやって、その後*item-detabese*を作ってから中身を見てやった。
確かに同じになるわー。
carとcdrの箱を作図しても、たしかに同じになるわー。


こんなこともパッと分からないなんて。

gosh> '(foo . (bar baz qux))
(foo bar baz quz)

なんだよなぁ。くっそー。
ということで今日はふて寝する。