ハッシュの基本

前回の挫折ポイントであるハッシュから開始.めちゃくちゃ簡単なことに気がつく.
基本操作はこんな感じ

; ハッシュを作成
(setq myhash (make-hash-table)

; 値の代入
(setf (gethash 'hoge myhash) 1)
(setf (gethash 'foo myhash) 2)

; 取得
(getf 'hoge myhash) ; => 1

; ハッシュのキーの数を得る
(hash-table-count myhash) ; => 2

ハッシュのイテレーションはどうすればいいんだろ?maphash関数を使いましょう.

(maphash '(lambda (key val) (format t "~A:~A\n" key val)) myhash)
; hoge:1
; foo:2

これで単語カウントプログラムくらいは書けるようになった.というわけで恒例のNaive Bayesを書き始める.ハッシュのキーリストを取得する関数がないので,自作することにする.

(defun get-hash-key-list (hash)
  (let ((lis nil))
    (maphash '(lambda (key value)
    (setq lis (cons key lis)))
         hash)
    lis))

しかしエラー.ぐぐっても同じような関数つくってる人いるし.Emacsで動作確認するとちゃんと動く.Common Lispではletが違うのだろうか??
もっかい評価したらちゃんと動いた.なんでや?!

原因は'(lambda...)ではなく#'(lambda...)でした.この#ってどういう意味だっけ?


というわけでこりこりNaive Bayes実装中~