Shammer's Philosophy

My private adversaria

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 を考えてみよう。