Anterior: Introducción a las estructuras, Subir: Estructuras [Índice general][Índice]
structures
es la lista que contiene las estructuras definidas por el usuario con defstruct
.
Define una estructura, la cual es una lista de nombres de campos a_1, ..., a_n
asociados a un símbolo S.
Todo individuo de una estructura dada consiste en una expresión con operador S
y exactamente n
argumentos. La sentencia new(S)
crea un nuevo
individuo con estructura S.
Un argumento consistente en un símbolo a especifica el nombre de
un campo. Un argumento consistente en una ecuación a = v
especifica
el nombre del campo a junto con su valor por defecto v. El valor por
defecto puede ser cualquier tipo de expresión.
La llamada a defstruct
añade S a la lista de estructuras definidas
por el usuario, structures
.
La sentencia kill(S)
borra S de la lista de estructuras
definidas por el usuario y elimina la definición de la estructura.
Ejemplos:
(%i1) defstruct (foo (a, b, c)); (%o1) [foo(a, b, c)] (%i2) structures; (%o2) [foo(a, b, c)] (%i3) new (foo); (%o3) foo(a, b, c) (%i4) defstruct (bar (v, w, x = 123, y = %pi)); (%o4) [bar(v, w, x = 123, y = %pi)] (%i5) structures; (%o5) [foo(a, b, c), bar(v, w, x = 123, y = %pi)] (%i6) new (bar); (%o6) bar(v, w, x = 123, y = %pi) (%i7) kill (foo); (%o7) done (%i8) structures; (%o8) [bar(v, w, x = 123, y = %pi)]
new
crea nuevos individuos de estructuras declaradas.
La sentencia new(S)
crea un nuevo individuo de
estructura S en el que cada campo toma su valor por defecto,
si este fue definido, o sin valor alguno en caso de que no se haya
fijado un valor por defecto en la definición de la estructura.
La sentencia new(S(v_1, ..., v_n))
crea un nuevo individuo de estructura S en el que los campos
adquieren los valores v_1, ..., v_n.
Ejemplos:
(%i1) defstruct (foo (w, x = %e, y = 42, z)); (%o1) [foo(w, x = %e, y = 42, z)] (%i2) new (foo); (%o2) foo(w, x = %e, y = 42, z) (%i3) new (foo (1, 2, 4, 8)); (%o3) foo(w = 1, x = 2, y = 4, z = 8)
@
es el operador para acceder a los campos de las estructuras.
La expresión x@ a
hace referencia al valor del
campo a del individuo x de una estructura dada. El nombre del campo no se evalúa.
Si el campo a de x no tiene valor asignado, x@ a
se evalúa a sí mismo; es decir, devuelve la propia expresión
x@ a
tal cual.
La sentencia kill(x@ a)
elimina el valor del campo a de x.
Ejemplos:
(%i1) defstruct (foo (x, y, z)); (%o1) [foo(x, y, z)] (%i2) u : new (foo (123, a - b, %pi)); (%o2) foo(x = 123, y = a - b, z = %pi) (%i3) u@z; (%o3) %pi (%i4) u@z : %e; (%o4) %e (%i5) u; (%o5) foo(x = 123, y = a - b, z = %e) (%i6) kill (u@z); (%o6) done (%i7) u; (%o7) foo(x = 123, y = a - b, z) (%i8) u@z; (%o8) u@z
El nombre del campo no se evalúa.
(%i1) defstruct (bar (g, h)); (%o1) [bar(g, h)] (%i2) x : new (bar); (%o2) bar(g, h) (%i3) x@h : 42; (%o3) 42 (%i4) h : 123; (%o4) 123 (%i5) x@h; (%o5) 42 (%i6) x@h : 19; (%o6) 19 (%i7) x; (%o7) bar(g, h = 19) (%i8) h; (%o8) 123
Anterior: Introducción a las estructuras, Subir: Estructuras [Índice general][Índice]