npt-japanese

% Function REPLACE

UP


Function REPLACE

Function REPLACE

構文

replace sequence-1 sequence-2 &key start1 end1 start2 end2 => sequence-1

引数と戻り値

sequence-1 - シーケンス
sequence-2 - シーケンス
start1, end1 - sequence-1の境界インデックス指定子。 デフォルトはstart1, end1それぞれ0nil
start2, end2 - sequence-2の境界インデックス指定子。 デフォルトはstart2, end2それぞれ0nil

定義

sequence-1start1end1に囲まれた要素が sequence-2start2end2に囲まれた要素によって 置換されることによって、sequence-1が破壊的に修正されます。

sequence-1は、sequence-2から連続した要素をコピーすることによって 破壊的に修正されます。 sequence-2start2end2に囲まれたサブシーケンスの各要素は、 sequence-1start1end1に囲まれたサブシーケンスにコピーされます。 もしこれらのサブシーケンスの長さが等しくないときは、 コピーされる要素数はもっとも短い方で決定されます。 長いサブシーケンスの終わり付近の余分な要素は、 操作には影響されません。 コピーされる要素数は、次のようにあらわされます。

(min (- end1 start1) (- end2 start2))

sequence-1sequence-2が同じオブジェクトであり、 変更する領域がコピーされる領域と重複しているときは、 コピー元の領域全体を別の場所にコピーし、 コピー元の領域だけをコピー元に戻したように行われます。 しかし、sequence-1sequence-2が同じではなく、 しかし変更される領域とコピーされる領域が重複している場合 (おそらくリスト構造が共有されているか、displaced-arrayのとき)、 置換操作後のsequence-1のサブシーケンスは 予想できない内容になっているでしょう。 もしsequence-2の要素が、 sequence-1に格納できる型ではないときは エラーが発生します。

例文

(replace "abcdefghij" "0123456789" :start1 4 :end1 7 :start2 4) 
=>  "abcd456hij"
(setq lst "012345678") =>  "012345678"
(replace lst lst :start1 2 :start2 0) =>  "010123456"
lst =>  "010123456"

副作用

sequence-1は修正されます。

影響

なし。

例外

なし。

参考

fill

備考

なし。


TOP, Github