Function COERCE
coerce
object result-type => result
object - オブジェクト
result-type - 型指定子
result - result-typeの型のオブジェクト。例外は状況は12.1.5.3. rational
型の複素数の標準的な表現のルールをご確認ください。
objectを型result-typeに強制的に変換します。
もしobjectがすでに型result-typeであったときは、 他の型のオブジェクトをresult-typeに強制することが 一般的に可能であったかどうかに関わらず、 object自身が返却されます。
それ以外のときは、objectは下記のルールに従って result-typeの型に強制されます。
sequence
list
の認識可能なサブタイプであり、 objectがシーケンスのときは、 resultはobjectと同じ要素を持ったリストです。 vector
の認識可能なサブタイプであり、 objectがシーケンスのときは、 resultはobjectと同じ要素を持ったvector
です。 もしresult-typeがspecialized
の型のとき、 resultは要素の型のspecialized
の部分を格上げした結果の 実際の配列の要素の型の型を持ちます。 もし要素の型が指定されていないときは、 その要素の型はデフォルトのt
になります。 実装が要素の型を決定できないときはエラーが発生します。 character
character
であり、 objectが文字指定子のときは、 resultは引数が示す文字になります。 complex
float
float
, short-float
, single-float
, double-float
, long-float
のどれかであり objectが実装のときは、 resultは、型がresult-typeであり、 符号がobjectと等しく、 その浮動小数の型が表現できる精度の大きさが objectと等しいものになります (もしresult-typeがfloat
で objectが浮動小数ではないときは、 resultはsingle-float
になります)。 function
t
t
へ強制できます このような場合、objectが単純に返却されます。coerce '(a b c) 'vector) => #(A B C)
(coerce 'a 'character) => #\A
(coerce 4.56 'complex) => #C(4.56 0.0)
(coerce 4.5s0 'complex) => #C(4.5s0 0.0s0)
(coerce 7/2 'complex) => 7/2
(coerce 0 'short-float) => 0.0s0
(coerce 3.5L0 'float) => 3.5L0
(coerce 7/2 'float) => 3.5
(coerce (cons 1 2) t) => (1 . 2) (
下記の全てのフォームは、エラーが発生します。
coerce '(a b c) '(vector * 4))
(coerce #(a b c) '(vector * 4))
(coerce '(a b c) '(vector * 2))
(coerce #(a b c) '(vector * 2))
(coerce "foo" '(string 2))
(coerce #(#\a #\b #\c) '(string 2))
(coerce '(0 1) '(simple-bit-vector 3)) (
なし。
もし強制が不可能な時は、 型type-error
のエラーが発生します。
(coerce x 'nil)
は常に型type-error
のエラーです。
result-typeがfunction
だが、 objectがfbound
ではないシンボルであったり、 またはシンボル名がマクロか特殊オペレーターのときは、 型type-error
のエラーが発生します。
result-typeで指定された要素数とobjectが違う長さでのときは、 型type-error
のエラーが発生します。
rational
, floor
, char-code
, char-int
浮動小数から有理数への強制と、 分数から浮動小数への強制は、 丸め問題のため提供されません。
coerce x 't) == (identity x) == x (