In Asir, various objects described according to the syntax of
Asir are translated to intermediate forms and by Asir
interpreter further translated into internal forms with the help of
basic algebraic engine. Such an object in an internal form has one of
the following types listed below.
In the list, the number coincides with the value returned by the
built-in function type()
.
Each example shows possible forms of inputs for Asir's prompt.
0 0
type(0)
.
1 number
1 2/3 14.5 3+2*@iNumbers have sub-types. See section Types of numbers.
2 polynomial (but not a number)
x afo (2.3*x+y)^10Every polynomial is maintained internally in its full expanded form, represented as a nested univariate polynomial, according to the current variable ordering, arranged by the descending order of exponents. (See section Distributed polynomial). In the representation, the indeterminate (or variable), appearing in the polynomial, with maximum ordering is called the main variable. Moreover, we call the coefficient of the maximum degree term of the polynomial with respect to the main variable the leading coefficient.
3 rational expression (not a polynomial)
(x+1)/(y^2-y-x) x/xNote that in Risa/Asir a rational expression is not simplified by reducing the common divisors unless
red()
is called
explicitly, even if it is possible. This is because the GCD computation
of polynomials is a considerably heavy operation. You have to be careful
enough in operating rational expressions.
4 list
[] [1,2,[3,4],[x,y]]Lists are all read-only object. A null list is specified by
[]
.
There are operations for lists: car()
, cdr()
,
cons()
etc. And further more, element referencing by indexing is
available. Indexing is done by putting [index]
's after a
program variable as many as are required.
For example,
[0] L = [[1,2,3],[4,[5,6]],7]$ [1] L[1][1]; [5,6]Notice that for lists, matrices and vectors, the index begins with number 0. Also notice that referencing list elements is done by following pointers from the first element. Therefore, it sometimes takes much more time to perform referencing operations on a large list than on a vectors or a matrices with the same size.
5 vector
newvect(3) newvect(2,[a,1])Vector objects are created only by explicit execution of
newvect()
command. The first example above creates a null vector object with
3 elements. The other example creates a vector object
with 2 elements which is initialized such that its 0-th element
is a
and 1st element is 1
.
The second argument for newvect
is used to initialize
elements of the newly created vector. A list with size smaller or equal
to the first argument will be accepted. Elements of the initializing
list is used from the left to the right. If the list is too short to
specify all the vector elements,
the unspecified elements are filled with as many 0's as are required.
Any vector element is designated by indexing, e.g.,
[index]
.
Asir
allows any type, including vector, matrix and list,
for each respective element of a vector.
As a matter of course, arrays with arbitrary dimensions can be
represented by vectors, because each element of a vector can be a vector
or matrix itself.
An element designator of a vector can be a left value of assignment
statement. This implies that an element designator is treated just like
a simple program variable.
Note that an assignment to the element designator of a vector has effect
on the whole value of that vector.
[0] A3 = newvect(3); [ 0 0 0 ] [1] for (I=0;I<3;I++)A3[I] = newvect(3); [2] for (I=0;I<3;I++)for(J=0;J<3;J++)A3[I][J]=newvect(3); [3] A3; [ [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ] [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ] [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ] ] [4] A3[0]; [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ] [5] A3[0][0]; [ 0 0 0 ]
6 matrix
newmat(2,2) newmat(2,3,[[x,y],[z]])Like vector objects, matrix objects are also created only by explicit execution of
newmat()
command. Initialization of the matrix
elements are done in a similar manner with that of the vector elements
except that the elements are specified by a list of lists. Each element,
again a list, is used to initialize each row; if the list is too short
to specify all the row elements, unspecified elements are filled with
as many 0's as are required.
Like vectors, any matrix element is designated by indexing, e.g.,
[index][index]
.
Asir
also allows any type, including vector, matrix and list,
for each respective element of a matrix.
An element designator of a matrix can also be a left value of assignment
statement. This implies that an element designator is treated just like
a simple program variable.
Note that an assignment to the element designator of a matrix has effect
on the whole value of that matrix.
Note also that every row, (not column,) of a matrix can be extracted
and referred to as a vector.
[0] M=newmat(2,3); [ 0 0 0 ] [ 0 0 0 ] [1] M[1]; [ 0 0 0 ] [2] type(@@); 5
7 string
"" "afo"Strings are used mainly for naming files. It is also used for giving comments of the results. Operator symbol
+
denote the
concatenation operation of two strings.
[0] "afo"+"take"; afotake
8 structure
newstruct(afo)The type structure is a simplified version of that in C language. It is defined as a fixed length array and each entry of the array is accessed by its name. A name is associated with each structure.
9 distributed polynomial
2*<<0,1,2,3>>-3*<<1,2,3,4>>This is the short for `Distributed representation of polynomials.' This type is specially devised for computation of Groebner bases. Though for ordinary users this type may never be needed, it is provided as a distinguished type that user can operate by
Asir
.
This is because the Groebner basis package provided with
Risa/Asir
is written in the Asir
user language.
For details See section Groebner basis computation.
10 32bit unsigned integer
11 error object
12 matrix over GF(2)
13 MATHCAP object
14 first order formula
15 matrix over GF(p)
16 byte array
-1 VOID object
Go to the first, previous, next, last section, table of contents.