Up: The Quail project: A
- the Common Lisp programming language including its powerful object system
allowing multiple class inheritance and generic functions which can type on any
number of arguments.
a base programming environment supplied by the Macintosh Common Lisp vendor
(Digitool, 1997) which is quite modern providing lisp file editors, incremental
compilation, program steppers, process backtrace, structure inspectors, and some
program analysis tools (who calls, etc.).
Similar features are available for the PC from Franz Lisp for their
Allegro Common Lisp (1997).
- Quail's multidimensional arrays including
-- array mapping operators, too numerous to mention.
-- usual matrix operators including solution of linear systems. As an example of the implementation
inverse is by default
postponed until needed for example
in matrix multiplication at which point solve is called original matrix and the matrix it is being multiplied by.
-- matrix decomposition objects (e.g. QR, LU, SVD, )
-- complete LINPACK collection of subroutines implemented for Quail matrices.
- Quail's statistical functionality including
Summary statistics -- mean, median, percentiles, sd,
Data objects -- array objects containing some meta-data
Model objects -- Extended Wilkinson-Rogers specification of
generalized additive models. Includes link-objects, etc.
Fit objects -- contains pointers to the model, the data, and
results of fitting one to the other.
Probability objects -- classes representing a standard
suite of univariate discrete and continuous
distributions, including classes for a general
continuous distribution, a general discrete distribution and an arbitrary finite mixture of either.
All instances respond to density, distribution, and quantile calculations as
well as requests for random values.
Datasets are treated as empirical distributions
for these purposes, making bootstrap calculations transparent as any other simulation.
Random number generators -- collection of linear congruential generators.
- Quail's graphic objects.
Views and viewed-objects
-- A graphic in Quail is a data structure
called a view which can be displayed simultaneously
in any number of viewports. The metaphor is that each
graphic is a ``view'' of some other object, its viewed-object. Hence every view data structure retains
a pointer to the viewed object.
See Hurley & Oldford (1991) for further detail.
Compound views -- views which contain subviews. Compound views
position their subviews in a display. The compound view
and every subview may have its own viewed-object; subviews
can themselves be compound views.
Stock statistical graphics -- dotplots, boxplots, histograms,
stem and leaf, 2 & 3D scatterplots,
2 & 3D line-segment plots, 2 & 3D function plots,
Controls -- needle-sliders, bar-sliders, push-buttons,
editable text-input, dialogs, pop-up menus.
These could operate on anything.
View layouts -- compound views which layout subviews
in row, column, or grid fashion, or at arbitrary user
Interactive display -- every view responds to three mouse
buttons (left, middle, right) alone or in combination with
two modifier keys (shift and ctrl). Unmodified mouse buttons
typically produce menus which refer to the physical display
of the selected view; ctrl-mouse buttons refer to the
viewed-object of the selected view.
Postscript output of any possible Quail display -- wysiwyg, colour encapsulated postscript.
- Miscellaneous mathematical functionality:
symbolic and numerical differentiation, numerical integration methods, root-finding
procedures, continued fraction expansion approximation, beta, gamma, and log-gamma functions,
basic combinatorial functions.
- Automatic Documentation:
constructed from specially structured documentation strings
constructed from file organization
- Interactive help system.
every newly defined function, class, method, etc. can have help displayed and or written out as a latex or
- Two strategic functions having methods for any object
(Signposts object )
-- returns a list
of ``signposts'' particular to the given object; each signpost is
a kind of control button view which if displayed and
mouse selected would lead to some other relevant display
peculiar to that signpost from that object.
(Display object )
-- returns a view, which
if drawn would produce a reasonable display of the given object.
Display always accepts a boolean argument :signposts? which
if true will return a view augmented by signposts.
Ctrl-middle-mouse on any view pops a menu offering the user the
opportunity to call display on the viewed-object, with or without
This means from a display, any viewed-object could be interacted
Up: The Quail project: A