Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20140815194324_common_lisp_mapc_dolist |
|
common_lisp_mapc_dolist
副作用のみを目的として map するときは mapcar ではなく mapc を使ったほうが効率が良い。
* (mapc #'princ '("a" "b" "c"))
abc
("a" "b" "c")
ただし、上記の処理にちょっと手を加えたい、もしくは少し凝ったことをしたい場合は第2引数の関数を lamda にするなどの作業が必要。
* (mapc (lambda (x) (format t "~A~%" x)) '("a" "b" "c"))
a
b
c
("a" "b" "c")
mapc の代わりに dolist が使える。
* (dolist (x '("a" "b" "c")) (format t "~A~%" x))
a
b
c
NIL
dolist の中のシンボル x の役割に注目すれば(副作用上は)mapc と等価であることがわかり易い。
当然下記のシンボル p はリスト(ペア)を受け取る。 * (dolist (p '((a . b) (c . d))) (format t "~S~%" p)) (A . B) (C . D) NIL
dolist が便利なのは body 部にいくつでも処理を書き込めるところだ。 * (dolist (p '((a . b) (c . d))) (format t "~S~%" p) (format t "key is ~A~%" (car p))) (A . B) key is A (C . D) key is C NIL
つまり mapc に比べて後からの変更が楽。
|
| © Shin Nakamura/BasicWerk 2014 |