Previous: Dimensions, Up: Physical dimension


5.3.4 Systems of units

A system of units is a set of units, one for each of the physical dimensions that Antik can handle. A system of units is needed by Antik for printing output and in special cases for converting physical quantities that have a physical dimension defined (e.g. length), but no units. The system of units defined by (nf-option :system-of-units) is used to determine the units in which the output is printed. There are pre-defined several systems of units, si, english, cgs:

     ANTIK-USER> (defparameter *length1* #_10_m)
     *LENGTH1*
     ANTIK-USER> *length1*
     #_10.000000000000000_m
     ANTIK-USER> (set-system-of-units :english)
     ; No value
     ANTIK-USER> *length1*
     #_32.808398950131235_ft

So by setting the system of units, you can convert values as needed,

     ANTIK-USER> (set-system-of-units :si)
     ; No value
     ANTIK-USER> #_12_feet
     #_3.657600000000000d0_m
     ANTIK-USER> (set-system-of-units :english)
     ANTIK-USER> #_3_m
     #_9.842519685039370d0_ft

A new system of units may be defined with define-system-of-units. One need not define all physical dimensions, but if a unit is needed for a particular dimension and it's not defined, an error will be signalled. For convenience, a system of units may be defined by augmentation of an existing system of units. For example, suppose that you wish to have a system of units that is like SI except that lengths are measured in km instead of meters. This will define such a system:

     (define-system-of-units kmdeg (km degree) si)

The SI system is the initial system of units.

— Macro: antik:define-system-of-units system-name units &optional augemented-system

Define a system of units with the given name and units, possibly by augmenting the named system of units.

— Function: antik:set-system-of-units system-of-units &rest units

Set the default system of units to the specified system.

— Macro: antik:with-system-of-units (system-of-units &rest units) &body body

When executing the body, change the system of units by naming the units. If system-of-units is non-nil, augment that system with the specified units; if it is t, augment the current system of units.

— Macro: antik:with-si-units &body body

Use the si system of units in the body.