by shigemk2

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

ループ(dolist)

(dolist (ループ変数 リスト式)
  フォーム1
  フォーム2
  ...)
;; 返り値: nil

whileよりループのほうが、リストの各要素に対してアクセスするので、
抽象度がワンランク上がっていることに留意する。

;;; whileをdolistに置き換える
(let ((lst '(1 2 3)) result)
  (while (car lst)
    (setq result (cons (car lst) result))
    (setq lst (cdr lst)))
  (cons 'finished result))		; => (finished 3 2 1)
(let (result)
  (dolist (x '(1 2 3))
    (setq result (cons x result)))	; => nil
  (cons 'finished result))		; => (finished 3 2 1)
;;; dolistの返り値を指定することもできる
(let (result)
  (dolist (x '(1 2 3) (cons 'finished result))
    (setq result (cons x result))))	; => (finished 3 2 1)

P67

Emacs Lispテクニックバイブル

Emacs Lispテクニックバイブル