Section9.79

]>
Book Contents Previous Section 9.78 StringTable Next Section 9.80 Table Book Index

## 9.79 Symbol

Symbols are one of the basic types manipulated by Axiom. 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

x 2+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]

x i, j

Type: Symbol

Somewhat less pretty is to attach subscripts, superscripts or arguments.

U := subscript(u, [1,2,1,2])

u 1, 2, 1, 2

Type: Symbol
V := superscript(v, [n])

v n

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] ])

2 0, 1 Mammoth i, j k, 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, 1 Nut i, j k, 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)
Book Contents Previous Section 9.78 StringTable Next Section 9.80 Table Book Index