Features of the Computer Algebra Language FLAC Victor L. Kistlerov Institute for Control Sciences, Profsoyuznaya 65, Moscow, USSR FLAC  is well defined functional language based on the concept of suspended computations. FLAC supports the notion of function as well as the notion of algebraic computations simulated by term conversion. Let us consider computational model which is a basis of the language. Let F be a certain mathematical partially defined function on an appropriate set, say X, F:X ---> Y. Assume further that any element of X is labeled by a unique symbolic name, e.g. x, y1 etc. Such primitive unstructured elements will be called simple ground terms. It is clear that, if we compute F at a point x in X where F is well defined then we obtain an element of Y which is also identified by a ground term. It is essential for our computation model that if F(x1) is computed at a point x1 in X but F is not well defined at this point then the computation is still considered valid and a new object which is called intesional of the function F is generated and appended to the condomain Y. The intensional is represented by an object which is called the intensional of the function F and syntactically identical to the function call F(x1). The procedure of such completion of the partial function F is called suspension of computation. The elements of the target set Y might have been simple ground term. Following the above mentioned concept of suspended computations set Y is extended by some intensionals of the form F(x1,...,xn). F G Looking at a composition X ---> Y ---> Z we see that Z will be extended by ground terms of the form G(y1, F(x1,...,xn),...). For adequate programing the language has built-in facilities for structure analyses of composite applicative ground terms. The necessity of a suspension is motivated by the need of further computations of external functional calls which continues on the extended domain after completion functions on intensionals of partial functions. We considered the computations as partial computations. Thus we interpret algebraic data types as intensionals of partial functions and algebraic operations for these as partial computations. For instance -1, 1/2, sqrt(-1), sin(x) are considered as intensional of the partial functions subtraction, division, square root and sine respectively. For the above-mentioned structure analysis of intensionals variables of tow types are present in FLAC: one is term variable (shorthanded further to term-variable) and the another is variable of list of terms (further: list-variable). A value of a term-variable is either simple ground term or an applicative ground term, and a value of a list-variable is a list of terms, which is a sequences of ground terms separated by commas. The token of a term variable is a leading "&" in its name, while the token of a list variable is a leading "#". A definition of a function is represented now as a sequence of statements of the following form:
= : Here the left-hand side describes a class (subset) of argument's values of the function in question and the right-hand side is a rule for computing the value of this function on the specified class of arguments. A step of computation of a FLAC-program is a conversion of a function call which consists of pattern matching the call with the left-hand side of one of the statements (including binding of the term- and list-variables) and subsequent evaluation of the right-hand side of the statement with prior substitution into it of the values of the term- and list-variables thus bound while matching. This is similar to mechanism of pattern matching in REFAL  language. If actually function call in question matches no left-hand side of no statement then the computation is suspended i.e. the result of the computation will be the intensional of the functional call itself (in no way transformed). Note that if, on the other hand, the function call in questions matches more than one left-hand side then the sequentially first one is selected for further interpretation. Due to the computational model FLAC is adequate language for algebraic computations. The mechanism of suspension of computations makes possible to design any kind data, occurring in algebra. The mechanism of pattern matching enables the implementation of the analysis of designed of algebraic structures with any degree of detailing. To denote the algebraic computations one can use infix operations and their semantics can be defined as FLAC-program. All these operations can be overloaded. An essential proper of FLAC is its being both system implementation language and language of system for a computer algebra system. By this time some versions of FLAC language is implemented for IBM/PC MS DOS. References, 1. Kristlerov V. L. Design Principles of the Computer Algebra Language FLAC, Preprint Inst. for Control Sci., Moscow, 1987 (in Russian). 2. Turchin V. F. Refal-5, programming guide & reference manual. New England Publishing Co. Holyoke 1989.