Next: 5.9 データの探索
Up: 5 リストを変形する操作
Previous: 5.7 データの置換
いくつかの要素をまとめてひとつのリストにしたり,逆にリストの要素を展開
するという操作は,直観的には括弧をつけたりはずしたりする操作といえます.
> (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))))
generated through LaTeX2HTML. M.Inaba 平成18年5月6日