Siguiente: Operadores aritméticos, Previous: 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, Previous: Operadores, Subir: Operadores [Índice general][Índice]