#### 5.2.1 Commands ¶

The basic syntax element is a command. It is defined as follows:

    command-name [tags] args

where command-name is an identifier representing the name of the command, tags is an optional list of optional or tagged arguments and args is a list of required or positional arguments.

Positional arguments are literals delimited with whitespace. They provide the command with the information necessary to its proper functioning. Each command has a fixed number of positional arguments. It is an error to supply more arguments to the command or to give it fewer arguments than it accepts.

Optional arguments allow to modify the behaviour of the command, like command line options in UNIX do. They are a list of tags (see Lexical Structure) separated by whitespace. An optional argument may have at most one parameter.

Each command understands a set of optional arguments. Supplying it tags that it does not understand results in an error.

For example, consider the following command

    header :mime :comparator "i;octet" ["to", "from"] "bug-mailutils@gnu.org"

Here, given that `header` takes two positional arguments: `header` is command name, the list `["to", "from"]` is first positional argument and the string `"bug-mailutils@gnu.org"` is second positional argument. There are two optional arguments: `:mime` and `:comparator`. The latter has a string `"i;octet"` as its parameter.