Capítulo de livro Revisado por pares

The design of Maple: A compact, portable, and powerful computer algebra system

1983; Springer Science+Business Media; Linguagem: Inglês

10.1007/3-540-12868-9_95

ISSN

1611-3349

Autores

Bruce W. Char, K. O. Geddes, W. Morven Gentleman, Gastón H. Gonnet,

Tópico(s)

Advanced Database Systems and Queries

Resumo

The Maple system has been under development at the University of Waterloo since December 1980. The kernel of the system is written in a BCPL-like language. A macroprocessor is used to generate code for several implementation languages in the BCPL family (in particular, C). Maple provides interactive usage through an interpreter for the user-oriented, higher-level, Maple programming language. This paper discusses Maple's current solution to several design issues. Maple attempts to provide a natural syntax and semantics for symbolic mathematical computation in a calculator mode. The syntax of the Maple programming language borrows heavily from the Algol family. Full “recursive evaluation” is uniformly applied to all expressions and to all parameters in function calls (with exceptions for only four basic system functions). Internally, Maple supports many types of objects: integers, lists, sets, procedures, equations, and power series, among others. Each internal type has its own tagged data structure. “Dynamic vectors” are used as the fundamental memory allocation scheme. Maple maintains a unique copy of every expression and subexpression computed, employing hashing for efficient access. Another feature relying upon hashing is the “remembering” facility, which allows system and user-defined functions to store results in internal tables to be quickly accessed in later retrieval, thus avoiding expensive re-computation of functions. The compiled kernel of the Maple system is relatively compact (about 100K bytes on a VAX under Berkeley Unix). This kernel includes the interpreter for the Maple language, basic arithmetic (including polynomial arithmetic), facilities for tables and arrays, print routines (including two-dimensional display), basic simplification, and basic functions (such as coeff, degree, map, and divide). Some functions (such as expand, diff (differentiation), and taylor) have a “core” in the kernel, and automatically load external user-language library routines for extensions. The higher-level mathematical operations (such as gcd, int (integrate), and solve, are entirely in the user-language library and are loaded only when called.

Referência(s)