Experimental Systems & Systems in Development


                 Features of the Computer Algebra Language FLAC
                             Victor L. Kistlerov
         Institute for Control Sciences, Profsoyuznaya 65, Moscow, USSR

       FLAC [1] 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
       Let us consider computational model which is a basis of the
       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
       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
       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 [2] 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
      1.  Kristlerov V. L.  Design Principles of the Computer Algebra
    Language FLAC, Preprint Inst. for Control Sci., Moscow, 1987 (in
      2.  Turchin V. F. Refal-5, programming guide & reference manual.
    New England Publishing Co. Holyoke 1989.  

Go to
Experimental Systems