elispでhashの多重配列もどきを作っていたら、オレオレライブラリになった件

| コメント(0) | トラックバック(0)

lispハッシュの関数がなければ、作ればいいじゃん ということで作ってみました。

  • GitHubのページへ
  • ソースのリンク wget等

      https://github.com/mukaer/emacs-hash-lib/raw/master/hash-lib.el
    

できること

  • ハッシュを簡単に作成、多重化可能でリストから変換
  • 多重化されているハッシュのデータを取り出す
  • ハッシュの中身を簡単に確認
  • ハッシュの結合

list-to-hash リストからハッシュ作成

;ハッシュ化のためのリスト用意
; 奇数がkey 偶数がvalue
(setq arg
'(
 list-test      '("a"  "foo"
               "b"  "bar"
               "c"  "baz")

 list-test2      '("a"  "foo"
               "b"  "bar"
               "list"  '( "a"  "list-test2 a"
                      "b"  "list-test2 b"
                     ))

 ruby-mode      "ruby"
 lisp-interaction-mode  "bash"
 perl-mode      "perl"
 a             '("b"       '("c"  '("d"  "eeee" )
                     )
            )
 "a"            "hoge"

))


;ハッシュ作成
(setq hash (list-to-hash arg))

get-hash ハッシュのデータを取得

(get-hash hash 'ruby-mode)
;=> "ruby"

(get-hash hash 'list-test "a")
;=> "foo"

(get-hash hash 'a "b" "c" "d")
;=> "eeee"

(get-hash hash "a" )
;=> "hoge"

;存在しなければnil
(get-hash hash 'hoge )
;=> nil

(get-hash hash 'b "c" "d" "e")
;=> nil

dump-hash ハッシュの確認

 (dump-hash hash)

;結果
"list-test => 
        a => foo ,
        b => bar ,
        c => baz  
list-test2 => 
        a => foo ,
        b => bar ,
        list => 
                a => list-test2 a ,
                b => list-test2 b  
ruby-mode => ruby ,
lisp-interaction-mode => bash ,
perl-mode => perl ,
a => 
        b => 
                c => 
                        d => eeee
a => hoge "

append-hash ハッシュの結合

;hash-tableを作成
(setq a_hash #s(hash-table test equal data( "a" "hoge"   "b" "fuga" "c" "ccc")))
(setq b_hash #s(hash-table test equal data( "a" "test"   "d" "ddd" "e" "eeee")))
(setq c_hash #s(hash-table test equal data( "f" "fffff"  "g" "ggg" )))

;hashの結合
(setq ap_hash (append-hash a_hash b_hash c_hash))


;確認
(dump-hash ap_hash)
;=> "a => test ,
;=> b => fuga ,
;=> c => ccc ,
;=> d => ddd ,
;=> e => eeee ,
;=> f => fffff ,
;=> g => ggg "

おわり

get-hash関数を作るのに苦労しました。 &restと再帰処理の組み合わせでハマること数時間・・・、 lispさん変数の扱いが全てオープンすぎる、おかげでlet厨になったよ。

あと、今回やっとGitHubを使い出しました! 今後はGitHubを使っていく所存です。

関連ページ

トラックバック(0)

トラックバックURL: http://mukaer.com/cgi-bin/mt/mt-tb.cgi/68

コメントする

PR

PR





検索

Loading

メニュー

twitter