5.2 Procedure Prototypes
Each procedure is defined by a procedure prototype:
(foo a b)
This indicates that the identifier foo is bound in the top-level environment to a procedure that has two arguments.
If the name of an argument is also the name of a type, then that argument shall be of the named type.  The following naming conventions for arguments also imply type restrictions:

•  obj: any object

•  list: list

•  q: quantity

•  x: real number

•  y: real number

•  n: integer

•  k: exact non-negative integer
If the procedure also accepts keyword arguments, the prototype is of the form:
(foo a b #!key key1: key2:)
This indicates that the procedure in addition accepts two keyword arguments.  The names of the keyword arguments indicate the keywords that are used to specify them and do not constrain the type.