Emacs Lisp の勉強

Emacs Lispが読めないと何かと歯がゆい思いをすることが多いので、
emacslisp.pdfを読んで学習。
以下はメモ。

  • *scratch*バッファはLisp Interaction(Lisp対話)モードである。
    • このモードでLFD(Line Feed、C-j)を打つと直前の式が評価される。
(+ 1 2) LFD
3
  • Lispでは(+ 1 2)のような、計算の対象となる式をS式(S-Expression)と呼ぶ。
    • SはSymbol(記号)の略。
  • Emacs Lisp では数や文字列も一つのS 式である。
    • 数や文字列はそれ自身へと評価される。
77
"Copland""Copland"
?d ⇒ 100
  • 真理値も自分自身へと評価される。
    • 真はt,偽はnil
tt
nilnil
  • 任意個のS式を空白やタブ、改行などで区切り、()で囲んだものをリスト(list)と呼ぶ。
    • Lispの語源はLISt Processingにあると伝えられている。
    • 一般にLispではリストを使って関数呼び出しを表現する。
      • 例えば、以下のリストの場合、+ は引数の和を結果とする関数であり、1 と2 は引数である。
(+ 1 2)3
  • Emacs Lispは空リスト()をnilと全く同じものとして取り扱う。
  • 文字列を扱う関数として特に有用なものとして、formatがある。
    • これはC言語ライブラリ関数のsprintfとほぼ同等の働きをする。
(format "%d は16 進数で%x" 20 20)"20 は16 進数で14"
(format "%c のコードは%d" ?A ?A)"A のコードは65"
(format "%s 県" "愛知")"愛知県"
  • listは各引数(を評価した結果)を各要素とするリストを作り出す関数である。
(list 1 2 3)(1 2 3)
(list "御河国" "穂国" "遠江国")("御河国" "穂国" "遠江国")
(list (- 1 2) 3 (= 4 4))(-1 3 t)
(list (list 1 2) (list 3 4))((1 2) (3 4))
(list)nil ;空リスト()とnilは同じ
  • cons(コンス)は、第1引数(の評価結果)を第2引数(の評価結果)のリストの先頭に追加する関数である。
    • consはCONStruct(組み立てる,構築する)の略といわれている。
(cons 1 (list 2 3))(1 2 3)
  • carはリストの最初の要素を返す。
(car (list 1 2 3)1
  • consはリストの2番目以降の要素のリストを返す。
(cdr (list 1 2 3)(2 3)
  • eqは2つの引数が同じ実体を表しているときに真。それ以外は偽。
(eq nil nil)t
(eq 1 2)nil
|||<
-atomは引数がconsで作られたペアでないときに限り真。
>|lisp|
(atom 1)t
(atom nil)t
(atom (list 1 2 3))nil

以上で大体5ページまでのまとめだけど、
こうやってまとめていくのは思ったよりもずっと面倒だ・・・。
あと2/3くらい残ってるよ( ´・ω・`)
とりあえず読むだけ読んで、
まとめは気が向いたときにでもやろうっと。

*1:Rubyにもこういうのあったなぁ