> (setq a '(1 2 3 4 5 6 7)) (1 2 3 4 5 6 7) > (nth-enclose 1 3 a) (1 (2 3 4) 5 6 7) > a (1 (2 3 4) 5 6 7) > (nth-extend 1 a) (1 2 3 4 5 6 7) > a (1 2 3 4 5 6 7)このような振舞いをするnth-enclose, nth-extendという関数は, 以下のように定義できます.
(defun nth-enclose (from to sexp) (when (>= to from 0) (let ((m (copy-tree (nthcdr from sexp)))) (rplacd (nthcdr (- to from) m) nil) (rplaca (nthcdr from sexp) m) (rplacd (nthcdr from sexp) (nthcdr (1+ to) sexp)) sexp))) (defun nth-extend (nth sexp) (let ((m (nth nth sexp))) (if (consp m) (progn (rplacd (nthcdr (1- (length m)) m) (nthcdr (1+ nth) sexp)) (setq m (nthcdr nth sexp)) (rplacd m (cdar m)) (rplaca m (caar m)) sexp))))