9.79 SymbolΒΆ
Symbols are one of the basic types manipulated by FriCAS. The Symbol domain provides ways to create symbols of many varieties.
The simplest way to create a symbol is to single quote an identifier.
X: Symbol := 'x
x |
Type: Symbol
This gives the symbol even if x has been assigned a value. If x has not been assigned a value, then it is possible to omit the quote.
XX: Symbol := x
x |
Type: Symbol
Declarations must be used when working with symbols, because otherwise the interpreter tries to place values in a more specialized type Variable.
A := 'a
a |
Type: Variable a
B := b
b |
Type: Variable b
The normal way of entering polynomials uses this fact.
x^2 + 1
x2+1 |
Type: Polynomial Integer
Another convenient way to create symbols is to convert a string. This is useful when the name is to be constructed by a program.
"Hello"::Symbol
Hello |
Type: Symbol
Sometimes it is necessary to generate new unique symbols, for example, to name constants of integration. The expression new() generates a symbol starting with %.
new()$Symbol
%A |
Type: Symbol
Successive calls to newnewSymbol produce different symbols.
new()$Symbol
%B |
Type: Symbol
The expression new(“s”) produces a symbol starting with %s.
new("xyz")$Symbol
%xyz0 |
Type: Symbol
A symbol can be adorned in various ways. The most basic thing is applying a symbol to a list of subscripts.
X[i,j]
xi,j |
Type: Symbol
Somewhat less pretty is to attach subscripts, superscripts or arguments.
U := subscript(u, [1,2,1,2])
u1,2,1,2 |
Type: Symbol
V := superscript(v, [n])
vn |
Type: Symbol
P := argscript(p, [t])
p(t) |
Type: Symbol
It is possible to test whether a symbol has scripts using the scripted?scripted?Symbol test.
scripted? U
true |
Type: Boolean
scripted? X
false |
Type: Boolean
If a symbol is not scripted, then it may be converted to a string.
string X
“x” |
Type: String
The basic parts can always be extracted using the namenameSymbol and scriptsscriptsSymbol operations.
name U
u |
Type: Symbol
scripts U
[sub=[1,2,1,2],sup=[],presup=[],presub=[],args=[]] |
Type: Record( sub: List OutputForm, sup: List OutputForm, presup: List OutputForm, presub: List OutputForm, args: List OutputForm)
name X
x |
Type: Symbol
scripts X
[sub=[],sup=[],presup=[],presub=[],args=[]] |
Type: Record( sub: List OutputForm, sup: List OutputForm, presup: List OutputForm, presub: List OutputForm, args: List OutputForm)
The most general form is obtained using the scriptscriptSymbol operation. This operation takes an argument which is a list containing, in this order, lists of subscripts, superscripts, presuperscripts, presubscripts and arguments to a symbol.
M := script(Mammoth, [ [i,j],[k,l],[0,1],[2],[u,v,w] ])
20,1Mammothi,jk,l(u,v,w) |
Type: Symbol
scripts M
[sub=[i,j],sup=[k,l],presup=[0,1],presub=[2],args=[u,v,w]] |
Type: Record( sub: List OutputForm, sup: List OutputForm, presup: List OutputForm, presub: List OutputForm, args: List OutputForm)
If trailing lists of scripts are omitted, they are assumed to be empty.
N := script(Nut, [ [i,j],[k,l],[0,1] ])
0,1Nuti,jk,l |
Type: Symbol
scripts N
[sub=[i,j],sup=[k,l],presup=[0,1],presub=[],args=[]] |
Type: Record( sub: List OutputForm, sup: List OutputForm, presup: List OutputForm, presub: List OutputForm, args: List OutputForm)