As a super-class of numbers, Kawa also provides quantities.
A *quantity* is a product of a *unit* and a pure number.
The number part can be an arbitrary complex number.
The unit is a product of integer powers of base units,
such as meter or second.

Quantity literals have the following syntax:

`quantity`

`::=`

`optional-sign`

`decimal`

* unit-term* [

*****

`unit-term`

**/**

`unit-term`

`unit-term`

`::=`

`unit-name`

**^**

`digit`

`unit-name`

`::=`

`letter`

Some examples are `10pt`

(10 points), `5s`

(5 seconds),
and `4cm^2`

(4 square centimeters).

Note the * quantity* syntax is not recognized by the reader.
Instead these are read as symbols.
Assuming there is no lexical binding the for the symbol, it will be
rewritten at compile-time into an expression. For example

`4cm^2`

is transformed into:
(* 4.0 (expt unit:cm 2))

True iff

is a quantity. Note that all numbers are quantities, but not the other way round. Currently, there are no quantities that re not numbers. To distinguish a plain unit-less number from a quantity, you can use`object`

`complex?`

.

Returns the pure number part of the quantity

, relative to primitive (base) units. If`q`

is a number, returns`q`

. If`q`

is a unit, yields the magitude of`q`

relative to base units.`q`

Returns the unit of the quantity

. If`q`

is a number, returns the empty unit.`q`

Procedure: `make-quantity`

`x`

`unit`

Returns the product of

(a pure number) and`x`

. You can specify a string instead of`unit`

, such as`unit`

`"cm"`

or`"s"`

(seconds).

Syntax: `define-base-unit`

`unit-name`

`dimension`

Define

as a base (primitive) unit, which is used to measure along the specified`unit-name`

.`dimension`

(define-base-unit dollar "Money")

Syntax: `define-unit`

`unit-name`

`expression`

Define

as a unit (that can be used in literals) equal to the quantity`unit-name`

.`expression`

(define-unit cent 0.01dollar)The

is declared in the`unit-name`

`unit`

namespace, so the above is equivalent to:(define-constant unit:cent (* 0.01 unit:dollar))