by shigemk2

当面は技術的なことしか書かない

連想リスト

連想リストとは、コンスセルを要素とするリストで、キーと値がコンスセルのペアになっている

;; 単純な連想リスト
(setq alist '((one . 1)))		; => ((one . 1))
;; ペアの追加
(add-to-list 'alist '(two . 2))		; => ((two . 2) (one . 1))
alist 					; => ((two . 2) (one . 1))
(assq 'two alist)			; => (two . 2)
(rassq 1 alist)				; => (one . 1)
(assoc-default 'two alist)		; => 2
;; 値がnilの要素の追加
(add-to-list 'alist '(zero))		; => ((zero) (two . 2) (one . 1))
(assq 'zero alist)			; => (zero)
(assq 'three alist)			; => nil
(assoc-default 'zero alist)		; => nil
(assoc-default 'three alist)		; => nil

;; auto-mode-alistを例にとって正規表現で場合分け
(car auto-mode-alist)			; => ("COMMIT_EDITMSG" . git-commit-mode)
(assoc-default "test.js" auto-mode-alist 'string-match) ; => js-mode
(assoc-default "test.el" auto-mode-alist 'string-match) ; => emacs-lisp-mode

P159

Emacs Lispテクニックバイブル

Emacs Lispテクニックバイブル