>>144
なら、アドレスもダンプする関数に渡すとかしたらどうだろう。
元のコードだと、外部の状態に処理が依存していて、関数型っぽくない。
参照透過性について調べてみて。これ無視すると関数型の威力激減。

二番目はこちらの勘違い。ごめん、忘れて。

letとsetqは慣習の話。仕様的にはsetqでもダメじゃない。
letは値に名前を付ける。setqはその名前に結び付けられた値を書き換える。
だから、setqを見たLisperは、どこかの変数の値を書き換えてるんだな、と思う。
典型例は>>139。要するに紛らわしい。