Standard Types

These types are bound to identifiers having the form <TYPENAME>. (This syntax and most of the names are as in RScheme.)

To find which Java classes these types map into, look in kawa/standard/Scheme.java.

Note that the value of these variables are instances of gnu.bytecode.Type, not (as you might at first expect) java.lang.Class.

Variable: <object>

An arbitrary Scheme value - and hence an arbitrary Java object.

Variable: <number>

The type of Scheme numbers.

Variable: <quantity>

The type of quantities optionally with units. This is a sub-type of <number>.

Variable: <complex>

The type of complex numbers. This is a sub-type of <quantity>.

Variable: <real>

The type of real numbers. This is a sub-type of <complex>.

Variable: <rational>

The type of exact rationl numbers. This is a sub-type of <real>.

Variable: <integer>

The type of exact Scheme integers. This is a sub-type of <rational>.

Variable: <symbol>

The type of Scheme symbols.

Variable: <keyword>

The type of keyword values. See Keywords.

Variable: <list>

The type of Scheme lists (pure and impure, including the empty list).

Variable: <pair>

The type of Scheme pairs. This is a sub-type of <list>.

Variable: <string>

The type of (mutable) Scheme strings. This is not the same as (non-mutable) Java strings (which happen to be the same as <symbol>).

Variable: <character>

The type of Scheme character values. This is a sub-type of <object>, in contrast to type <char>, which is the primitive Java char type.

Variable: <vector>

The type of Scheme vectors.

Variable: <procedure>

The type of Scheme procedures.

Variable: <input-port>

The type of Scheme input ports.

Variable: <output-port>

The type of Scheme output ports.

Variable: <String>

This type name is a special case. It specifies the class <java.lang.String> (just as <symbol> does). However, coercing a value to <String> is done by invoking the toString method on the value to be coerced. Thus it "works" for all objects. It also works for #!null.

When Scheme code invokes a Java methods any parameter whose type is java.lang.String is converted as if it was decalred as a <String>.

More will be added later.

A type specifier can also be one of the primitive Java types. The numeric types <long>, <int>, <short>, <byte>, <float>, and <double> are converted from the corresponding Scheme number classes. Similarly, <char> can be converted to and from Scheme characters. The type boolean matches any object, and the result is false if and only if the actual argument is #f. (The value #f is identical to Boolean.FALSE, and #t is identical to Boolean.TRUE.) The return type <void> indicates that no value is returned.

A type specifier can also be a fully-qualified Java class name (for example <java.lang.StringBuffer>). In that case, the actual argument is cast at run time to the named class. Also, <java.lang.StringBuffer[]> represents an array of references to java.lang.StringBuffer objects.