Node:Query Classes, Next:Query Phases, Up:Query Processing
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:
(y or n)
is used as the prompt;
yes
or 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
predicate ask_query/4
. The characteristics of a query
class are normally described by the extendible predicate
'SU_messages':query_class(+QueryClass, -Prompt, -InputMethod, -MapMethod, -FailureMode).
The arguments of the query_class
predicate have the
following meaning:
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
returned.
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.
For example, the built-in map method char([yes-"yY", no-"nN"])
expects a code-list as raw input, and gives the answer term
yes
or no
depending on the first non-whitespace character
of the input. As another example, the built-in map method =
requests that the raw input itself is returned as the answer
term--this is often used in conjunction with the input method
term(Options)
.
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:
help_query
: print a help message, then print the text of
the query again
help
: only print the help message
query
: only print the text of the query
none
: do not print anything