% 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それぞれ0
とnil
。
start2, end2 - sequence-2の境界インデックス指定子。
デフォルトはstart2, end2それぞれ0
とnil
。
sequence-1のstart1とend1に囲まれた要素が sequence-2のstart2とend2に囲まれた要素によって 置換されることによって、sequence-1が破壊的に修正されます。
sequence-1は、sequence-2から連続した要素をコピーすることによって 破壊的に修正されます。 sequence-2のstart2とend2に囲まれたサブシーケンスの各要素は、 sequence-1のstart1とend1に囲まれたサブシーケンスにコピーされます。 もしこれらのサブシーケンスの長さが等しくないときは、 コピーされる要素数はもっとも短い方で決定されます。 長いサブシーケンスの終わり付近の余分な要素は、 操作には影響されません。 コピーされる要素数は、次のようにあらわされます。
(min (- end1 start1) (- end2 start2))
sequence-1とsequence-2が同じオブジェクトであり、 変更する領域がコピーされる領域と重複しているときは、 コピー元の領域全体を別の場所にコピーし、 コピー元の領域だけをコピー元に戻したように行われます。 しかし、sequence-1とsequence-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は修正されます。
なし。
なし。
なし。