## 14 Type

Function: COERCE (x type)

  Package:LISP

  Coerces X to an object of the type TYPE.

Function: TYPE-OF (x)

  Package:LISP

  Returns the type of X.

Function: CONSTANTP (symbol)

  Package:LISP

  Returns T if the variable named by SYMBOL is a constant; NIL otherwise.

Function: TYPEP (x type)

  Package:LISP

  Returns T if X is of the type TYPE; NIL otherwise.

Function: COMMONP (x)

  Package:LISP

  Returns T if X is a Common Lisp object; NIL otherwise.

Function: SUBTYPEP (type1 type2)

  Package:LISP

  Returns T if TYPE1 is a subtype of TYPE2; NIL otherwise. If it could not determine, then returns NIL as the second value. Otherwise, the second value is T.

Macro: CHECK-TYPE

  Package:LISP

  Syntax:

      (check-type place typespec [string])

  Signals an error, if the contents of PLACE are not of the specified type.

Macro: ASSERT

  Package:LISP

  Syntax:

      (assert test-form [({place}*) [string {arg}*]])

  Signals an error if the value of TEST-FORM is NIL. STRING is an format string used as the error message. ARGs are arguments to the format string.

Macro: DEFTYPE

  Package:LISP

  Syntax:

      (deftype name lambda-list {decl | doc}* {form}*)

  Defines a new type-specifier abbreviation in terms of an ’expansion’ function (lambda lambda-list1 {decl}* {form}*) where lambda-list1 is identical to LAMBDA-LIST except that all optional parameters with no default value specified in LAMBDA-LIST defaults to the symbol ’*’, but not to NIL. When the type system of GCL encounters a type specifier (NAME arg1 ... argn), it calls the expansion function with the arguments arg1 ... argn, and uses the returned value instead of the original type specifier. When the symbol NAME is used as a type specifier, the expansion function is called with no argument. The doc-string DOC, if supplied, is saved as the TYPE doc of NAME, and is retrieved by (documentation ’NAME ’type).

Declaration: DYNAMIC-EXTENT

  Package:LISP Declaration to allow locals to be cons’d on the C stack. For example (defun foo (&rest l) (declare (:dynamic-extent l)) ...) will cause l to be a list formed on the C stack of the foo function frame. Of course passing L out as a value of foo will cause havoc. (setq x (make-list n)) (setq x (cons a b)) (setq x (list a b c ..)) also are handled on the stack, for dynamic-extent x.