※ リストを回転させる関数 (2000-09-26) リストを回転させる関数(rotate-list)を作りました。 (setq double-list '(1 2 3 4 5 6)) (rotate-list double-list 1) とすると、a の値が 1 2 3 4 5 6 -> 2 3 4 5 6 1 と1つずれます。(nreverse などと同様、a のリスト構造を直接書き換えます。) さらに、 (rotate-list double-list 2) とすると 2 3 4 5 6 1 -> 4 5 6 1 2 3 と2つずれます。 数値に負数を指定すると、逆に回転します。 (defmacro rotate-list (a &optional n) (setq n (or (eval n) 1)) (cond ((= n 0) (list 'quote a)) ((> n 0) `(setq ,a (let ((r (nthcdr ,n ,a))) (rplacd (nthcdr ,(1- n) ,a) nil) (rplacd (last r) ,a) r))) (t `(setq ,a (let ((r (last ,a ,(- n)))) (rplacd (last ,a ,(- 1 n)) nil) (rplacd (last r) ,a) r)))))