mapcar 関数と mapc 関数比較その2
mapc を使った場合、引数に渡されたリストの情報も更新されるのではないか、と考えていろいろ試している。
[Lisp] - Shammerism
しかし、予想通りの結果にならなかった。let を使ったからか?と思い、let を使用せずに同様の処理を書いてみた。
(defun mapc-test-improve2 (lst) (if (listp lst) (mapc #'(lambda (x) (format t "~A~%" (concatenate 'string "Hello, "x))) lst) (format t "Usage: mapc-test-improve2 $LIST~%")))
これを実行してみた。
?(setf friends '("Taro" "Jiro")) ("Taro" "Jiro") ?(mapc-test-improve2 friends) Hello, Taro Hello, Jiro ("Taro" "Jiro") ?friends ("Taro" "Jiro")
リストはもとのままだ。
でも、ここまでやって気づいた。concatenate しているのは、リストの個々の要素に対してであり、リスト自体を変更しているわけではないためではないか、と。いずれ気が向いたら、リストに対して処理を行う mapc を考えてみよう。