リストの内容を書き換えるsetf関数
Emacs Lisp基礎文法最速マスター – (rubikitch loves (Emacs Ruby CUI Books))参考
リスト
Lispにも配列はあるものの、リストの方が基本的なのでリストを。
リストはlist関数を使う。リテラルをリストするには「'(要素 …)」でもよい。
(setq ary ‘(100 200 300)) ; => (100 200 300)
(setq ary (list 100 200 300)) ; => (100 200 300)
要素の参照と代入
(setq ary (list 100 200 300))
;; 最初の要素を参照するにはcarかfirst関数を使う。
(setq a (car ary)) ; => 100
(setq a (first ary)) ; => 100
;; nthかelt関数を使うと任意の要素を取り出せる
(setq a (nth 0 ary)) ; => 100
(setq a (elt ary 0)) ; => 100
(setq b (nth 1 ary)) ; => 200
;; リストを書き換えるにはsetfとnthを併用する
(require ‘cl)
(setf (nth 0 ary) 1) ; => 1
(setf (nth 1 ary) 2) ; => 2
;; 確かに書き変わっている。
ary ; => (1 2 300)
要素の個数
リストの要素にもlength関数が使える。
(length ary) ; => 3
リストの操作
(setq ary (list 1 2 3)) ; => (1 2 3)
;; 先頭を取り出すにはpopマクロを使う
(require ‘cl)
(pop ary) ; => 1
ary ; => (2 3)
;; 先頭に追加するにはpushマクロを使う
(push 5 ary) ; => (5 2 3)
;; 末尾を取り出す(非破壊的)
;; データ構造上、リストでは末尾を取り出すことは稀。
(last ary) ; => (3)
(car (last ary)) ; => 3
ary ; => (5 2 3)
;; 末尾に追加するにはリスト化してappendする
(setq ary (list 5 2)) ; => (5 2)
(append ary (list 9)) ; => (5 2 9)
setqはEmacs-Lispで最も基本的な関数で変数に値をセットするものですが、setfというのは、初めて見るもので思わず調べてしまいました。複雑なリスト操作をすることはないと思いますが、setfというのはsetqと紛らわしく気になる関数なので、メモしておきました。
コメントを残す