Sketch of present functionality

- 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 strategy, matrix 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 information.*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, scatterplot matrices, brushing, linking,*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 specified positions.*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 postscript file. - 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 signposts. This means from a display, any viewed-object could be interacted with directly.