ハッシュの基本
前回の挫折ポイントであるハッシュから開始.めちゃくちゃ簡単なことに気がつく.
基本操作はこんな感じ
; ハッシュを作成 (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実装中~