% Function COERCE
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