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 |