Siguiente: Operadores aritméticos, Anterior: Operadores, Subir: Operadores [Índice general][Índice]
Maxima reconoce los operadores aritméticos, relacionales y lógicos
usuales de la matemática. Además, Maxima dispone de operadores para
la asignación de valores a variables y la definición de funciones.
La siguiente tabla muestra los operadores que se describen en este
capítulo, en la que se incluye el nombre del operador,
el rango de enlace por la izquierda lbp
, el rango de enlace
por la derecha rbp
, el tipo de operador y un ejemplo, para
finalizar, en cada caso, con su formato interno tal como
es leída por el analizador sintáctico.
Operador lbp rbp Tipo Ejemplo Formato interno + 100 134 nary a+b ((mplus) $A $B) - 100 134 prefix -a ((mminus) $A) * 120 nary a*b ((mtimes) $A $B) / 120 120 infix a/b ((mquotient) $A $B) ^ 140 139 infix a^b ((mexpt) $A $B) ** 140 139 infix a**b ((mexpt) $A $B) ^^ 140 139 infix a^^b ((mncexpt) $A $B) . 130 129 infix a.b ((mnctimes) $A $B) < 80 80 infix a<b ((mlessp) $A $B) <= 80 80 infix a<=b ((mleqp) $A $B) > 80 80 infix a>b ((mqreaterp) $A $B) >= 80 80 infix a>=b ((mgeqp) $A $B) not 70 prefix not a ((mnot) $A) and 65 nary a and b ((mand) $A $B) or 60 nary a or b ((mor) $A $B) # 80 80 infix a#b ((mnotequal) $A $B) = 80 80 infix a=b ((mequal) $A $B) : 180 20 infix a:b ((msetq) $A $B) :: 180 20 infix a::b ((mset) $A $B) := 180 20 infix a:=b ((mdefine) $A $B) ::= 180 20 infix a::=b ((mdefmacro) $A $B)
Con los rangos de enlace de los operadores se definen las reglas de prioridad de
cálculo de los mismos. Así, por ejemplo, el analizador
sintáctico interpreta la expresión a + b * c
como
a + (b * c)
, pues el rango de enlace por la izquierda de la
multiplicación es mayor que rango de enlace por la izquierda de la
suma.
Maxima clasifica los operadores de la siguiente manera:
Los operadores prefijos son unarios con un único operando que
se escribe a continuación del operando. Ejemplos son -
y not
.
Los operadores sufijos son unarios con un único operando que
se escribe precediendo al operando. Un ejemplo es el factorial !
.
Los operadores infijos son operadores binarios que necesitan dos operandos,
los cuales se colocan uno a cada lado del operador. Ejemplos son el operador
para la exponenciación, ^
, y el operador de asignación, :
.
Los operadores n-arios admiten un número arbitrario de operandos. Son
ejemplos la multiplicación, *
, y la suma, +
.
Los acotadores son operadores que se utilizan para establecer el comienzo
y final de una lista de operandos. Los operadores [
y ]
son
ejemplos de acotadores, que se utilizan para definir una lista tal como
[a, b, ...]
.
Un operador no-fijo carece de operandos. Maxima no tiene operadores internos
no-fijos, pero se pueden crear como cuando se escribe nofix(quit)
,
lo que permite obviar el uso de paréntesis, y utilizar simplemente quit
en lugar de quit()
, para cerrar una sesión de Maxima.
En la sección dedicada a los operadores definidos por el usuario se describe cómo redefinir los operadores internos de Maxima y cómo crear otros nuevos.
El mecanismo para definir un nuevo operador es sencillo. Tan solo es necesario declarar una función como operador; la función operador puede estar definida o no.
Un ejemplo de operador definido por el usuario es el siguiente.
Nótese que la llamada a función "dd" (a)
equivale a dd a
,
de igual manera que "<-" (a, b)
también equivale a a <- b
.
Nótese también que las funciones "dd"
y "<-"
no están definidas en este ejemplo.
(%i1) prefix ("dd"); (%o1) dd (%i2) dd a; (%o2) dd a (%i3) "dd" (a); (%o3) dd a (%i4) infix ("<-"); (%o4) <- (%i5) a <- dd b; (%o5) a <- dd b (%i6) "<-" (a, "dd" (b)); (%o6) a <- dd b
La tabla anterior no incluye todos los operadores definidos en Maxima,
ya que también lo son !
para el factorial, for
, do
y
while
para programar bucles, o if
, then
y else
para definir condicionales.
Las funciones remove
y kill
eliminan propiedades de operadores de un átomo.
La llamada remove ("a", op)
sólo elimina las propiedades de operador de a.
La llamada kill ("a")
elimina todas las propiedades de a, incluidas las propiedades de operador.
Nótese que el nombre del operador debe ir entre comillas.
(%i1) infix ("##"); (%o1) ## (%i2) "##" (a, b) := a^b; b (%o2) a ## b := a (%i3) 5 ## 3; (%o3) 125 (%i4) remove ("##", op); (%o4) done (%i5) 5 ## 3; Incorrect syntax: # is not a prefix operator 5 ## ^ (%i5) "##" (5, 3); (%o5) 125 (%i6) infix ("##"); (%o6) ## (%i7) 5 ## 3; (%o7) 125 (%i8) kill ("##"); (%o8) done (%i9) 5 ## 3; Incorrect syntax: # is not a prefix operator 5 ## ^ (%i9) "##" (5, 3); (%o9) ##(5, 3)
Siguiente: Operadores aritméticos, Anterior: Operadores, Subir: Operadores [Índice general][Índice]