これらの関数は、コンスセルの木全体で要素を置き換える。(リストの
トップレベルの要素だけに作用するsubstitute
関数に関しては、
See 列関数.)
この関数は、コンスセルの木であるtreeの中の、oldの出現を
newで置き換える。置き換えられた木を戻す。木は、置き換えが
起こらなかった部分は引数treeと記憶域を共有するかもしれない点は
除いて、コピーである。オリジナルのtreeは修正されない。この
関数は、構成要素のコンスセルのcar
とcdr
両方に再帰し、
oldに対して比較する。old自身がコンスセルの場合、木の中の
マッチするセルは、そのセル中は再帰的に置き換えられることなしに、
通常通り置き換えられる。oldとの比較は、指定されたテスト(既定では
eql
)に従ってなされる。:key
関数は、木の要素に
適用されるが、oldには適用されない。
この関数はsubst
と似ているが、コピーするのではなく(setcar
またはsetcdr
で)破壊的に修正することで動作する点が異なる。
subst-if
やsubst-if-not
、nsubst-if
、
nsubst-if-not
関数は同様に定義される。
この関数はsubst
と似ているが、oldとnewの対の
連想リストを取る点が異なる。木の各要素は、(:key
関数がある
場合はそれを適用後)alistのcar
と比較される; マッチする
場合、対応するcdr
で置き換えられる。
これはsublis
の破壊版である。