2011/12/24

emacs lispのplist

これを見て初めて知りました。 elispにもcl同様にplistがあったんですね。しかも変数/関数とは別にバインドできるアレが。(あ、でもこれはcl packageのお陰なのかな?そこまで調べる気は起きなかったり)
*** Welcome to IELM ***  Type (describe-mode) for help.
ELISP> (get 'hoge :foo)
nil
ELISP> (get 'hoge :bar)
nil
ELISP> (setf (get 'hoge :foo) 100)
100
ELISP> (setf (get 'hoge :bar) 200)
200
ELISP> (get 'hoge :foo)
100
ELISP> (get 'hoge :bar)
200
ELISP> hoge
*** Eval error ***  Symbol's value as variable is void: hoge
ELISP> (setq hoge 'aaaaaaaaaaa)
aaaaaaaaaaa
ELISP> hoge
aaaaaaaaaaa
ELISP> (defun hoge (x) x)
hoge
ELISP> (hoge "hoge")
"hoge"
ELISP> (hoge "hello, world !!")
"hello, world !!"
ELISP> (symbol-value 'hoge)
aaaaaaaaaaa
ELISP> (symbol-function 'hoge)
(lambda
  (x)
  x)

ELISP> (symbol-plist 'hoge)
(:foo 100 :bar 200)

ELISP> (symbol-name 'hoge)
"hoge"
ELISP> (symbol-package 'hoge)
*** Eval error ***  Symbol's function definition is void: symbol-package
ELISP> 
twitterで教えてもらったけど、Common Lispのsymbolって5つもスロットあったのか(笑)変数/関数にplistの3つかと思ってた。その点schemeは良し悪しは別としてすごくシンプル。
Emacs Lispテクニックバイブル

0 件のコメント:

コメントを投稿