Function CONCATENATE
concatenate result-type &rest sequences => result-sequence
result-type - sequenceの型指定子
sequences - シーケンス
result-sequence - 型result-typeの正常なシーケンス
concatenateは、引数に指定された順番で、 全sequencesの個々の全要素を含んだシーケンスを返却します。 シーケンスは型result-typeであり、 それは型sequenceのサブタイプでなければなりません。
全てのsequencesはコピーされ、 結果は、どのsequencesに対しても どのような構造でも共有されてはいけません。 したがって、もしただひとつだけシーケンスが与えられ、 その型がresult-typeであったとき、 concatenateは単純にそれを返却するのではなく、 sequencesをコピーすることが要求されます。
もしsequencesのどの要素も、 結果のシーケンスの要素になりえないときはエラーです。 もしresult-typeがlistのサブタイプのときは、 返却値はリストでしょう。
もしresult-typeがvectorのサブタイプの場合、 実装がresult-typeを要素の型として決めることができるのであれば、 その要素の型をアップグレードした結果が返却値の配列の要素の型になります。 しかし実装が要素の型を決定できないか、あるいは*のときは、 返却値の配列の要素の型はtになります。 その他の場合はエラーが発生します。
(concatenate 'string "all" " " "together" " " "now") => "all together now"
(concatenate 'list "ABC" '(d e f) #(1 2 3) #*1011)
=> (#\A #\B #\C D E F 1 2 3 1 0 1 1)
(concatenate 'list) => NIL
(concatenate '(vector * 2) "a" "bc") should signal an errorなし。
result-typeが、 listのサブタイプでも、 vectorのサブタイプでもないとき、 型type-errorのエラーが発します。
result-typeで指定した要素数と、 sequencesの合計が違う場合は、 型type-errorのエラーが発します。
なし。