coerce

Title
coerce
Type
Function
Arguments
coerce OBJECT TYPE
Package
lisp
Section
データ型
File
typespec.l
OBJECT を TYPE 型に変換します。

TYPE はシンボルまたはリストで、それぞれ以下の型に変換されます。
  'list         ──→ リスト
  'array        ─┬→ 配列
  'simple-array ─┘
  'character    ──→ 文字
  'float        ─┬→ 単精度浮動小数点数
  'short-float  ─┤
  'single-float ─┘
  'double-float ─┬→ 倍精度浮動小数点数
  'long-float   ─┘
  'complex      ──→ 複素数
  'function     ──→ 関数
リストの場合、その最初の要素で型が決まります。
2番目以降の要素は、最初の要素が array、simple-array、complex の場合のみ
意味を持ち、それぞれ以下のように動作します。
  '(array ...)        ─┬→ make-sequence の TYPE と同じ
  '(simple-array ...) ─┘
  '(complex ...)      ──→ 実部、虚部を二番目の要素の型に変換
  
使用例:
  (coerce "abc" 'list)                         ; 文字列を文字のリストに
  => (#\a #\b #\c)
  (coerce #(1 2 3) 'list)                      ; 配列をリストに
  => (1 2 3)
  (coerce '(a b c) '(array t 1))               ; リストを配列に
  => #(a b c)
  (coerce "abc" '(array t 1))                  ; 文字列を文字の配列に
  => #(#\a #\b #\c)
  (coerce '(#\a #\b #\c) '(array character 1)) ; 文字のリストを文字列に
  => "abc"
  (coerce "abc" '(array character 1))          ; 意味なし
  => "abc"

  (coerce "a" 'character)                      ; 文字列を文字に
  => #\a
  
  (coerce 1 'float)
  => 1.0
  (coerce 1 'double-float)
  => 1.0d0
  (coerce 1.0 'complex)
  => #C(1.0 0.0)
  (coerce #C(1 2) '(complex float))            ; 単精度の複素数に
  => #C(1.0 2.0)
  
  (coerce 'let 'function)                      ; シンボル名の関数を返す
  => #<function: let>
  (coerce '(lambda (x) (* x 2)) 'function)     ; 関数を作ることも
  => #<lexical-closure: (anonymous)>
  (funcall (coerce '(lambda (x) (* x 2)) 'function) 12)
  => 24
Seealso
type-of