Emacs Lispを少しだけ理解してみる

Emacs Lispもほんの少しだけ理解したのでそれをまとめてみる。

グローバル変数の束縛

(set 'my-var "hoge")

(setq my-var "hoge")

は同じ意味。setのときはmy-varをそのまま書くとそれを評価してしまうようなので、クオートが必要らしい。setqのqはquoteのq。また、setqの場合は複数の変数束縛を一度に行なうことができる。

(setq my-var1 "foo"
      my-var2 "bar"
      my-var3 "hoge")

一方

(defvar my-var "hoge")

グローバル変数の束縛だがsetqとは以下の点で異なる。

  • 未定義の変数を初期化する時に使う。既に値が設定されている変数に対してdefvarしても、元の値は変更されない。
  • 第3引数に「変数の説明文」をつけることができる。C-h v(または、describe-variable手続き)で変数の説明を見る時にこの説明文が参照される。

その他

  • リストとかの概念は他のLisp(といっても私はSchemeしか知らんけど)と一緒。cons,car,cdrも共通。クオート、シンボルなど概念も共通のようだ。Scheme知ってると飲み込みがある程度早くできる。ただしSchemeはレキシカルスコープ、Emacs Lispはダイナミックスコープという大きな違いがある。
  • concatはstringの連結。setenvとかgetenvはみたまんまらしい。
  • string-matchで正規表現のマッチングを行なうらしい。