連想リストふたたび
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)
なんだよなぁ。くっそー。
ということで今日はふて寝する。