Queries posed by the system can be classified according to the kind of input they expect, the way the input is processed, etc. Queries of the same kind form a query class.
For example, queries requiring a yes/no answer form a query class with the following characteristics:
no, respectively, as the abstract answer;
There are built-in query classes for reading in yes/no answers, toplevel queries, debugger commands, etc.
A query class is characterized by a ground Prolog term,
which is supplied as the first argument to the query processing
ask_query/4. The characteristics of a query
class are normally described by the hook predicate
'SU_messages':query_class(QueryClass, Prompt, InputMethod, MapMethod, FailureMode).
The arguments of the
query_class predicate have the
an atom to be used for prompting the user.
a non-variable term, which specifies how to obtain input from the user.
For example, a built-in input method is described by the atom
line. This requests that a line is input from the user, and the
code list is returned. Another built-in input method is
term(Options); here, a Prolog term is read and
The input obtained using InputMethod is called raw input, as it may undergo further processing.
In addition to the built-in input methods, the user can define his/her own extensions.
a non-variable term, which specifies how to process the raw input to get the abstract answer to the query.
For example, the built-in map method
expects a code list as raw input, and gives the answer term
no depending on the first non-whitespace character
of the input. For another example, the built-in map method
requests that the raw input itself be returned as the answer
term—this is often used in conjunction with the input method
In addition to the built-in map methods the user can define his/her own extensions.
This is used only when the mapping of raw input fails, and
the query must be repeated. This happens for example if the user typed
a character other than y or n in case of the
yes_or_no query class. FailureMode determines what to
print before re-querying the user. Possible values are:
print a help message, then print the text of the query again
only print the help message
only print the text of the query
do not print anything