add-item!

指定したプレイヤーの持ち物に、指定したアイテムを追加する手続きadd-item!。
答えを見ずに書いたら間違えた。

;; アイテムを追加する
(define add-item!
  (lambda (player item)
    (let ((items (cdr (assoc 'inventory player))))
      (push! items item))))

使ってみる。

gosh> (add-item! *player* 'elixir)
(elixir potion potion dagger cookie dagger)
gosh> *player*
((hp . 320)
 (mp . 66)
 (position . #f)
 (inventory potion potion dagger cookie dagger))

エリクサー追加できてない!!ヽ(`Д´)ノウワァァァァン


本を見てみると、letでの名前を束縛の仕方が違う。

(let ((p (assoc 'inventory player)))
   ...)

じゃないっすか。
で、push!するときに

(push! (cdr p) item)

ってしてるのね。
cdrをやるタイミングで違う結果になってる...?
なんでじゃろ?うーむ...