思い付かないので
とりあえず整理だけ。変数名をc[ad]+rにしたのもいけなかったな…
(defun nalist-to-plist (alist) (do* ((result (car alist)) (a alist next) (next #1=(cdr a) #1#)) ((null a) result) (let ((1st (car a)) (2nd a) (3rd (cadr a))) (setf (car 2nd) (cdr 1st) (cdr 2nd) 3rd (cdr 1st) 2nd)))) (defun nplist-to-alist (plist) (do* ((result (cdr plist)) (p plist next) (next #2=(cddr p) #2#)) ((null p) result) (let ((1st-pair p) (1st (cdr p)) (2nd (cdddr p))) (setf (cdr 1st-pair) (car 1st) (car 1st) 1st-pair (cdr 1st) 2nd))))
破壊的操作を10分で - kozima の日記 - cadr group
逆の付け変え方かな。loopの書き方勉強になる。
リストの破壊的操作をする - 象徴ヶ淵
rotatefとか全く出てこなかった。短かいなー。