next up previous
Next: 5.2 連結操作によりリストを変形する関数 nconc Up: 5 リストを変形する操作 Previous: 5 リストを変形する操作


5.1 リストを変形する基本操作rplaca, rplacd

cons, list, appendなどこれまでに出てきたリストデータ操作関数は, 常に新しいデータ領域を作るという形の関数で,引数に与えられたリストデー タの構造を書き換えるというような副作用はないものばかりでしたが, 引数に与えたリストの構造を書き換えるための関数として, rplaca, rplacd, nconcなどがあります.
> (setq x '(1 2 3))
(1 2 3) 
> (rplaca x 'a)
(A 2 3) 
> x
(A 2 3) 
> (rplacd x 'a)
(A . A) 
> x
(A . A)
Xlispの内部では以下の処理がなされています.

#define rplaca(x,y)	((x)->n_car = (y))
#define rplacd(x,y)	((x)->n_cdr = (y))

LVAL xrplca()
{   LVAL list,newcar;
    list = xlgacons(); newcar = xlgetarg(); xllastarg();
    rplaca(list,newcar); return (list);
}

LVAL xrplcd()
{   LVAL list,newcdr;
    list = xlgacons(); newcdr = xlgetarg(); xllastarg();
    rplacd(list,newcdr); return (list);
}


generated through LaTeX2HTML. M.Inaba 平成18年5月6日