Defines name to have the given value.
The value is readonly, and you cannot assign to it.
(This is not fully enforced.)

If define-early-constant is used
or the value is a compile-time constant,
then the compiler will create a final field with
the given name and type, and evaluate value
in the module’s class initializer (if the definition
is static) or constructor (if the definition is non-static),
before other definitions and expressions.
Otherwise, the value is evaluated in the module body
where it appears.

If the value is a compile-time constant,
then the definition defaults to being static.

If init is specified and name does not have a global variable
binding, then init is evaluated, and name bound to the result.
Otherwise, the value bound to name does not change.
(Note that init is not evaluated
if name does have a global variable binding.)

Also, declares to the compiler that name will be looked up
in the per-thread dynamic environment. This can be useful for shutting up
warnings from --warn-undefined-variable.

This is similar to the Common Lisp defvar form.
However, the Kawa version is (currently) only allowed at module level.