リストセルを指すように変数を設定するにはどうすればよいですか?
リスト内のすべての値に値を掛けるマクロを作成しようとしています。これは私が現在持っているものです:
(defmacro scale (areas scale)
`(dotimes (n (list-length ,areas))
(setf (nth n ,areas) (* (nth n ,areas) ,scale))))
n番目のセルを2回検索するので、これが最も効率的な方法ではないのではないかと心配しています。むしろ、n番目のセルを指すように変数を設定して、setf
そのセルの値を変更し、そのセル*
の値を計算に使用できるようにします。
さらに良いのはdolist
、変数をセル参照に設定して使用することです。これは可能ですか?
私がここにいる間、セルが1つあるときに、リスト内の次のセルを取得することもできますか。イテレータのようなもので、次のようなことができます。
(let ((area (car areas))
(loop while area do
(setf area (* area scale))
(setf area (next area))))
しかし、ポインタの設定と参照セルの値の設定をどのように区別するのかわかりません。
私は理にかなっていると思います:)