Evaluación (Manual de Maxima 5.50.0)

## 7 Evaluación ¶

### 7.1 Introducción a la evaluación ¶

Las fases que se suceden desde que el usuario solicita un cálculo hasta que obtiene el resultado son: la propia solicitud del cálculo, la evaluación, la simplificación y la respuesta.

Toda expresión expr que se introduzca en Maxima será evaluada, de manera que los símbolos que no tengan asociado ningún valor y los números evalúan a sí mismos; en cambio, aquellos símbolos que tengan un valor asociado serán sustituídos por tales valores.

Dos ejemplos. En el primero, los símbolos y los números se evalúan a sí mismos; en el segundo ejemplo, al asignarle a la variable `a` el valor `2`, allá donde se escriba `a` será sustituido por dicho valor.

    (%i1) [a, b, 2, 1/2, 1.0];
                                      1
    (%o1)                   [a, b, 2, -, 1.0]
                                      2
    (%i2) a:2$

    (%i3) [a, sin(a), a^2];
    (%o3)                    [2, sin(2), 4]

Maxima distingue entre funciones en forma verbal y funciones en forma nominal. Las funciones en forma verbal son evaluadas tomando en cuenta los valores dados a sus argumentos; en cambio, las funciones nominales no son evaluadas, aunque sus argumentos tengan valores asignados. Las funciones son susceptibles de ser tratadas de ambos modos; ejemplos típicos son la función de diferenciación `diff` y la de integración `integrate`.

En el siguiente ejemplo se le asigna a la variable `a` cierto valor, a continuación se invoca la función `diff` en su forma verbal con sus argumentos tomando los valores `a*x^2` y `x`. Seguidamente se invoca a la misma función `diff` en su forma nominal, lo cual se consigue mediante el operador de comilla simple (`'`); en este caso la función no es evaluada y devuelve una expresión simbólica en la que los argumentos sí han sido evaluados, pues la variable `a` es sustituida por el valor `1/2`.

    (%i1) a:1/2;
                                    1
    (%o1)                           -
                                    2
    (%i2) diff(a*x^2, x);
    (%o2)                           x
    (%i3) 'diff(a*x^2, x);

                                      2
                                 d   x
    (%o3)                        -- (--)
                                 dx  2

Sin embargo, no todas las funciones de Maxima sustituyen sus argumentos por sus valores. La documentación para cada función informará si sus argumentos son evaluados o no.

Por ejemplo, la función `properties` no evalúa sus argumentos, lo cual resulta práctico para el usuario, ya que en caso contrario debería utilizar el operador de comilla simple `'` a fin de poder mostrar las propiedades del símbolo `a`. A continuación se muestra como en el primer caso se devuelve una lista vacía, ya que no se le ha encontrado ninguna propiedad al símbolo `a`; una vez se le ha asignado el valor `2`, la función `properties` nos dice que la variable guarda un valor y esto es así porque no ha sustituido el símbolo `a` por su valor `2`. En consecuencia, la función `properties` muestra las propiedades de `'a`.

    (%i1) properties(a);
    (%o1)                          []
    (%i2) a:2$

    (%i3) properties(a);
    (%o3)                        [value]

La evaluación de símbolos, funciones y expresiones se puede controlar con los operadores de comilla simple (`'`) y de doble comilla simple (`''`). La evaluación se suprime con la comilla simple y se fuerza con la doble comilla simple (que no comilla doble).

Con la función `ev` se evalúa una expresión dentro de un contexto determinado controlado por el valor de ciertas variables `evflag` y funciones de evaluación `evfun`.

### 7.2 Funciones y variables para la evaluación ¶

Operador: ' ¶

  El operador comilla simple `'` evita la evaluación.

  Aplicado a un símbolo, la comilla simple evita la evaluación del símbolo.

  Aplicado a la llamada de una función, la comilla simple evita la evaluación de la función llamada, aunque los argumentos de la función son evaluados (siempre y cuando la evaluación no se evite de otra manera). El resultado es una forma de nombre de la función llamada.

  Aplicado a una expresión con paréntesis, la comilla simple evita la evaluación de todos los símbolos y llamadas a funciones que hayan en la expresión. E.g., `'(f(x))` significa que no se evalua la expresión `f(x)`. `'f(x)` (con la comilla simple aplicada a `f` en cambio de a `f(x)`) significa el retorno de la forma de nombre de `f` aplicada a `[x]`.

  La comilla simple no evita la simplificación.

  Cuando el interruptor global `noundisp` es `true`, los nombres se muestran con una comilla simple. Este interruptor siempre tiene como valor `true` cuando se muestran definiciones de funciones.

  Ver también los operadores comilla-comilla `''` y `nouns`.

  Ejemplos:

  Aplicado a un símbolo, la comilla simple evita la evaluación del símbolo.

      (%i1) aa: 1024;
      (%o1)                         1024
      (%i2) aa^2;
      (%o2)                        1048576
      (%i3) 'aa^2;
                                       2
      (%o3)                          aa
      (%i4) ''%;
      (%o4)                        1048576

  Aplicado a la llamada de una función, la comilla simple evita la evaluación de la función llamada, aunque los argumentos de la función son evaluados (siempre y cuando la evaluación no se evite de otra manera). El resultado es una forma de nombre de la función llamada.

      (%i1) x0: 5;
      (%o1)                           5
      (%i2) x1: 7;
      (%o2)                           7
      (%i3) integrate (x^2, x, x0, x1);
                                     218
      (%o3)                          ---
                                      3
      (%i4) 'integrate (x^2, x, x0, x1);
                                   7
                                  /
                                  [   2
      (%o4)                       I  x  dx
                                  ]
                                  /
                                   5
      (%i5) %, nouns;
                                     218
      (%o5)                          ---
                                      3

  Aplicado a una expresión con paréntesis, la comilla simple evita la evaluación de todos los símbolos y llamadas a funciones que haya dentro en la expresión.

      (%i1) aa: 1024;
      (%o1)                         1024
      (%i2) bb: 19;
      (%o2)                          19
      (%i3) sqrt(aa) + bb;
      (%o3)                          51
      (%i4) '(sqrt(aa) + bb);
      (%o4)                     bb + sqrt(aa)
      (%i5) ''%;
      (%o5)                          51

  La comilla simple no evita la simplificación.

      (%i1) sin (17 * %pi) + cos (17 * %pi);
      (%o1)                          - 1
      (%i2) '(sin (17 * %pi) + cos (17 * %pi));
      (%o2)                          - 1

  Internamente, Maxima considera que las operaciones con números decimales de coma flotante son simples simplificaciones.

      (%i1) sin(1.0);
      (%o1)                          .8414709848078965
      (%i2) '(sin(1.0));
      (%o2)                          .8414709848078965

Operador: '' ¶

  El operador comilla-comilla `''` (dos comillas simples) modifica la evaluación en las expresiones de entrada.

  Aplicado a cualquier expresión general expr, las dos comillas simples hacen que el valor de expr sea sustituido por expr en la expresión de entrada.

  Aplicado al operador de una expresión, el operador comilla-comilla hace que el operador pase de ser un nombre a ser un verbo, a menos que ya sea un verbo.

  El operador comilla-comilla es aplicado por el analizador sintáctico de entrada; no se almacena como una parte de la expresión de entrada analizada. Este operador se aplica siempre tan pronto como es detectado y no puede ser comentado con una comilla simple. De esta manera, el operador comilla-comilla provoca la evaluación de una expresión cuando ésta no estaba previsto que fuese evaluada, como en la definición de funciones, expresiones lambda y expresiones comentadas con una comilla simple `'`.

  El operador comilla-comilla es reconocido tanto por `batch` como por `load`.

  Véanse también el operador comilla simple `'` y `nouns`.

  Ejemplos:

  Aplicado a cualquier expresión general expr, las dos comillas simples hacen que el valor de expr sea sustituido por expr en la expresión de entrada.

      (%i1) expand ((a + b)^3);
                           3        2      2      3
      (%o1)               b  + 3 a b  + 3 a  b + a
      (%i2) [_, ''_];
                               3    3        2      2      3
      (%o2)     [expand((b + a) ), b  + 3 a b  + 3 a  b + a ]
      (%i3) [%i1, ''%i1];
                               3    3        2      2      3
      (%o3)     [expand((b + a) ), b  + 3 a b  + 3 a  b + a ]
      (%i4) [aa : cc, bb : dd, cc : 17, dd : 29];
      (%o4)                   [cc, dd, 17, 29]
      (%i5) foo_1 (x) := aa - bb * x;
      (%o5)                 foo_1(x) := aa - bb x
      (%i6) foo_1 (10);
      (%o6)                      cc - 10 dd
      (%i7) ''%;
      (%o7)                         - 273
      (%i8) ''(foo_1 (10));
      (%o8)                         - 273
      (%i9) foo_2 (x) := ''aa - ''bb * x;
      (%o9)                 foo_2(x) := cc - dd x
      (%i10) foo_2 (10);
      (%o10)                        - 273
      (%i11) [x0 : x1, x1 : x2, x2 : x3];
      (%o11)                    [x1, x2, x3]
      (%i12) x0;
      (%o12)                         x1
      (%i13) ''x0;
      (%o13)                         x2
      (%i14) '' ''x0;
      (%o14)                         x3

  Aplicado al operador de una expresión, la doble comilla simple hace que el operador pase de ser nominal a verbal, a menos que ya sea un verbo.

      (%i1) declare (foo, noun);
      (%o1)                         done
      (%i2) foo (x) := x - 1729;
      (%o2)                 ''foo(x) := x - 1729
      (%i3) foo (100);
      (%o3)                       foo(100)
      (%i4) ''foo (100);
      (%o4)                        - 1629

  El operador comilla-comilla es aplicado por el analizador sintáctico de entrada; no se almacena como una parte de la expresión de entrada analizada.

      (%i1) [aa : bb, cc : dd, bb : 1234, dd : 5678];
      (%o1)                 [bb, dd, 1234, 5678]
      (%i2) aa + cc;
      (%o2)                        dd + bb
      (%i3) display (_, op (_), args (_));
                                 _ = cc + aa

                               op(cc + aa) = +

                          args(cc + aa) = [cc, aa]

      (%o3)                         done
      (%i4) ''(aa + cc);
      (%o4)                         6912
      (%i5) display (_, op (_), args (_));
                                 _ = dd + bb

                               op(dd + bb) = +

                          args(dd + bb) = [dd, bb]

      (%o5)                         done

  El operador comilla-comilla provoca la evaluación de una expresión cuando ésta no estaba previsto que fuese evaluada, como en la definición de funciones, expresiones lambda y expresiones comentadas con una comilla simple `'`.

      (%i1) foo_1a (x) := ''(integrate (log (x), x));
      (%o1)               foo_1a(x) := x log(x) - x
      (%i2) foo_1b (x) := integrate (log (x), x);
      (%o2)           foo_1b(x) := integrate(log(x), x)
      (%i3) dispfun (foo_1a, foo_1b);
      (%t3)               foo_1a(x) := x log(x) - x

      (%t4)           foo_1b(x) := integrate(log(x), x)

      (%o4)                      [%t3, %t4]
      (%i5) integrate (log (x), x);
      (%o5)                     x log(x) - x
      (%i6) foo_2a (x) := ''%;
      (%o6)               foo_2a(x) := x log(x) - x
      (%i7) foo_2b (x) := %;
      (%o7)                    foo_2b(x) := %
      (%i8) dispfun (foo_2a, foo_2b);
      (%t8)               foo_2a(x) := x log(x) - x

      (%t9)                    foo_2b(x) := %

      (%o9)                      [%t7, %t8]
      (%i10) F : lambda ([u], diff (sin (u), u));
      (%o10)             lambda([u], diff(sin(u), u))
      (%i11) G : lambda ([u], ''(diff (sin (u), u)));
      (%o11)                  lambda([u], cos(u))
      (%i12) '(sum (a[k], k, 1, 3) + sum (b[k], k, 1, 3));
      (%o12)         sum(b , k, 1, 3) + sum(a , k, 1, 3)
                          k                  k
      (%i13) '(''(sum (a[k], k, 1, 3)) + ''(sum (b[k], k, 1, 3)));
      (%o13)             b  + a  + b  + a  + b  + a
                          3    3    2    2    1    1

Función: ev (expr, arg_1, …, arg_n) ¶

  Evalua la expresión expr en el entorno especificado por los argumentos arg_1, ..., arg_n. Los argumentos son interruptores (Variables Booleanas), variables de asignación, ecuaciones y funciones. `ev` retorna el resultado (otra expresión) de la evaluación.

  La evaluación se realiza por etapas, como sigue:

  1. Primero se configura el entorno de acuerdo a los argumentos los cuales pueden ser algunos o todos de la siguiente lista:
     - `simp` causa que expr sea simplificada sin importar el valor de la variable interruptor `simp` la cual inhibe la simplificación cuando su valor es `false`.
     - `noeval` suprime la fase de evaluación de `ev` (Vea el paso (4) más adelante). Esto es muy útil en conjunción con otras variables interruptor y causan en expr que sea resimplificada sin ser reevaluada.
     - `nouns` causa la evaluación de las formas nominales (típicamente funciones sin evaluar tales como `'integrate` or `'diff`) en `expr`.
     - `expand` causa expansión.
     - `expand (m, n)` causa expansión, asignando los valores de `maxposex` y `maxnegex` a m y n, respectivamente.
     - `detout` hace que cualesquiera matrices inversas calculadas en expr conserven su determinante fuera de la inversa, en vez de que divida a cada elemento.
     - `diff` realiza todas las diferenciaciones indicadas en expr.
     - `derivlist (x, y, z, ...)` realiza sólo las diferenciaciones con respecto a las variables indicadas.
     - `risch` hace que las integrales presentes en expr se evalúen mediante el algoritmo de Risch. Véase también `risch`. Cuando se utiliza el símbolo especial `nouns`, se aplica la rutina estándar de integración.
     - `float` provoca la conversión de los números racionales no-enteros a números decimales de coma flotante.
     - `numer` causa que algunas funciones matemáticas (incluyendo potenciación) con argumentos numéricos sean evaluados como punto flotante. Esto causa que las variables en expr las cuales hayan sido declaradas como variables numéricas sean reemplazadas por sus respectivos valores. Esto también configura la variable interruptor `float` a `true`.
     - `pred` provoca la evaluación de los predicados (expresiones las cuales se evaluan a `true` o `false`).
     - `eval` provoca una post-evaluación extra de expr (véase el paso (5) más adelante), pudiendo aparecer `eval` varias veces; por cada aparición de `eval`, la expresión es reevaluada.
     - `A`, donde `A` es un átomo declarado como una variable de tipo interruptor, (Vea `evflag`) causa que `A` tenga como valor `true` durante la evaluación de expr.
     - `V: expresion` (o alternativamente `V=expresion`) causa que `V` tenga el valor de `expresion` durante la evaluación de expr. Notese que si `V` es una opción Maxima, entonces `expresion` se usa como su valor durante la evaluación de expr. Si más de un argumento de `ev` es de este tipo entonces el vínculo se hace en paralelo. Si `V` es una expresión no atómica entonces se hace una sustitución más que un vínculo.
     - `F` donde `F`, un nombre de función, ha sido declarado para ser una función de evaluación (Vea `evfun`) causa que `F` sea aplicada a expr.
     - Cualquier otro nombre de función (e.g., `sum`) causa la evaluación de las ocurrencias de esos nombres en `expr` como si ellos fueran verbos.
     - En adición de que una función ocurra en expr (digamos `F(x)`) puede ser definida localmente para el propósito de esta evaluación de expr pasando `F(x) := expresion` como un argumento a `ev`.
     - Si un átomo no mencionado anteriormente o una variable o expresión con subíndices fueran pasadas como un argumento, esta es evaluada y si el resultado es una ecuación o una asignación entonces el vínculo o sustitución se llevará a cabo. Si el resultado es una lista entonces los miembros de la lista tratados como si ellos fueran argumentos adicionales pasados a `ev`. Esto permite que una lista de argumentos sea pasada (e.g., `[X=1, Y=A**2]`) o una lista de nombres de ecuaciones (e.g., `[%t1, %t2]` donde `%t1` y `%t2` son ecuaciones) tal como lo que es retornado por `solve`.

     Los argumentos de `ev` pueden ser pasados en cualquier orden con excepción de la sustitución de ecuaciones las cuales son manipuladas en secuencia, de izquierda a derecha y las funciones de evaluación las cuales son compuestas, e.g., `ev (expr, ratsimp, realpart)` es manipulada como `realpart (ratsimp (expr))`.

     Los interruptores `simp`, `numer` y `float` pueden también ser configurados localmente en una sentencia block, o globalmente en Maxima para que su efecto permanezca hasta que sean reconfiguradas.

     Si expr es una Expresión Racional Canónica (CRE, por sus siglas en inglés), entonces la expresión retornada por `ev` es también de tipo CRE, siempre que los interruptores `numer` y `float` no sean `true`.

  2. Durante el paso (1), se fabrica una lista de las variables que no contienen subíndices que aparecen en el lado izquierdo de las ecuaciones en los argumentos o en el valor de algunos argumentos si el valor es una ecuación. Las variables (variables que contienen subíndices las cuales no tienen asociado un arreglo de funciones como también las variables que no contienen subíndices) en la expresión expr son reemplazadas por sus valores globales, excepto por aquellos que aparezcan en esa lista. Usualmente, expr es sólo una etiqueta o un `%` (como en `%i2` en el ejemplo de más abajo) así que este paso simplemente recupera la expresión a la que hace referencia la etiqueta y así `ev` puede trabajarla.
  3. Si algunas sustituciones son indicadas por los argumentos, ellas serán llevadas a cabo ahora.
  4. La expresión resultante es también reevaluada (a menos que uno de los argumentos fuese `noeval`) y simplificada de acuerdo a los argumentos. Notese que cualquier llamada a una función en expr será llevada a cabo después de que las variables sean evaluadas en ella y que `ev(F(x))` pueda comportarse como `F(ev(x))`.
  5. Por cada aparición de `eval` en los argumentos, se repetirán los pasos (3) y (4).

  Ejemplos:

      (%i1) sin(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
                                           d                    2
      (%o1)              cos(y) + sin(x) + -- (sin(w)) + (w + 1)
                                           dw
      (%i2) ev (%, numer, expand, diff, x=2, y=1);
                                     2
      (%o2)                cos(w) + w  + 2 w + 2.449599732693821

  Una sintaxis alternativa de alto nivel ha sido desarrollada para `ev` por medio de la cual se pueden escribir solamente sus argumentos, sin el comando `ev()`; se trata de una forma de escritura simplificada:

      expr, arg_1, ..., arg_n

  Esta sintaxis no está permitida dentro de otras expresiones, como funciones, bloques, etc.

  Nótese el proceso de vínculo en paralelo en el siguiente ejemplo:

      (%i3) programmode: false;
      (%o3)                                false
      (%i4) x+y, x: a+y, y: 2;
      (%o4)                              y + a + 2
      (%i5) 2*x - 3*y = 3$
      (%i6) -3*x + 2*y = -4$
      (%i7) solve ([%o5, %o6]);
      Solución

                                                1
      (%t7)                               y = - -
                                                5

                                               6
      (%t8)                                x = -
                                               5
      (%o8)                            [[%t7, %t8]]
      (%i8) %o6, %o8;
      (%o8)                              - 4 = - 4
      (%i9) x + 1/x > gamma (1/2);
                                         1
      (%o9)                          x + - > sqrt(%pi)
                                         x
      (%i10) %, numer, x=1/2;
      (%o10)                      2.5 > 1.772453850905516
      (%i11) %, pred;
      (%o11)                               true

Símbolo especial: eval ¶

  Como argumento en una llamada a `ev (expr)`, `eval` fuerza una evaluación extra de expr.

  Véase también `ev`.

  Ejemplo:

      (%i1) [a:b,b:c,c:d,d:e];
      (%o1)                            [b, c, d, e]
      (%i2) a;
      (%o2)                                  b
      (%i3) ev(a);
      (%o3)                                  c
      (%i4) ev(a),eval;
      (%o4)                                  e
      (%i5) a,eval,eval;
      (%o5)                                  e

Propiedad: evflag ¶

  Cuando un símbolo x goza de la propiedad `evflag`, las expresiones `ev(expr, x)` y `expr, x` (en modo interactivo) equivalen a `ev(expr, x = true)`. Esto es, a x se le asigna `true` al tiempo que se evalúa expr.

  La expresión `declare(x, evflag)` dota a la variable x de la propiedad `evflag`.

  Los interruptores que tienen la propiedad `evflag` son:

         algebraic           cauchysum       demoivre
         dotscrules          %emode          %enumer
         exponentialize      exptisolate     factorflag
         float               halfangles      infeval
         isolate_wrt_times   keepfloat       letrat
         listarith           logabs          logarc
         logexpand           lognegint
         m1pbranch           numer_pbranch   programmode
         radexpand           ratalgdenom     ratfac
         ratmx               ratsimpexpons   simp
         simpproduct         simpsum         sumexpand
         trigexpand

  Ejemplos:

      (%i1) sin (1/2);
                                       1
      (%o1)                        sin(-)
                                       2
      (%i2) sin (1/2), float;
      (%o2)                   0.479425538604203
      (%i3) sin (1/2), float=true;
      (%o3)                   0.479425538604203
      (%i4) simp : false;
      (%o4)                         false
      (%i5) 1 + 1;
      (%o5)                         1 + 1
      (%i6) 1 + 1, simp;
      (%o6)                           2
      (%i7) simp : true;
      (%o7)                         true
      (%i8) sum (1/k^2, k, 1, inf);
                                  inf
                                  ====
                                  \     1
      (%o8)                        >    --
                                  /      2
                                  ====  k
                                  k = 1
      (%i9) sum (1/k^2, k, 1, inf), simpsum;
                                       2
                                    %pi
      (%o9)                         ----
                                     6
      (%i10) declare (aa, evflag);
      (%o10)                        done
      (%i11) if aa = true then YES else NO;
      (%o11)                         NO
      (%i12) if aa = true then YES else NO, aa;
      (%o12)                         YES

Propiedad: evfun ¶

  Cuando la función F goza de la propiedad `evfun`, las expresiones `ev(expr, F)` y `expr, F` (en modo interactivo) equivalen a `F(ev(expr))`.

  Si se especifican dos o más funciones, F, G, etc., como poseedoras de la propiedad `evfun`, éstas se aplican en el mismo orden en el que han sido especificadas como tales.

  La expresión `declare(F, evfun)` dota a la función F de la propiedad `evfun`.

  Las funciones que tienen la propiedad `evfun` por defecto son:

         bfloat          factor       fullratsimp
         logcontract     polarform    radcan
         ratexpand       ratsimp      rectform
         rootscontract   trigexpand   trigreduce

  Ejemplos:

      (%i1) x^3 - 1;
                                    3
      (%o1)                        x  - 1
      (%i2) x^3 - 1, factor;
                                      2
      (%o2)                 (x - 1) (x  + x + 1)
      (%i3) factor (x^3 - 1);
                                      2
      (%o3)                 (x - 1) (x  + x + 1)
      (%i4) cos(4 * x) / sin(x)^4;
                                  cos(4 x)
      (%o4)                       --------
                                     4
                                  sin (x)
      (%i5) cos(4 * x) / sin(x)^4, trigexpand;
                       4           2       2         4
                    sin (x) - 6 cos (x) sin (x) + cos (x)
      (%o5)         -------------------------------------
                                      4
                                   sin (x)
      (%i6) cos(4 * x) / sin(x)^4, trigexpand, ratexpand;
                                 2         4
                            6 cos (x)   cos (x)
      (%o6)               - --------- + ------- + 1
                                2          4
                             sin (x)    sin (x)
      (%i7) ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
                                 2         4
                            6 cos (x)   cos (x)
      (%o7)               - --------- + ------- + 1
                                2          4
                             sin (x)    sin (x)
      (%i8) declare ([F, G], evfun);
      (%o8)                         done
      (%i9) (aa : bb, bb : cc, cc : dd);
      (%o9)                          dd
      (%i10) aa;
      (%o10)                         bb
      (%i11) aa, F;
      (%o11)                        F(cc)
      (%i12) F (aa);
      (%o12)                        F(bb)
      (%i13) F (ev (aa));
      (%o13)                        F(cc)
      (%i14) aa, F, G;
      (%o14)                      G(F(cc))
      (%i15) G (F (ev (aa)));
      (%o15)                      G(F(cc))

Variable opcional: infeval ¶

  Habilita el modo de "evaluación infinita". `ev` repetidamente evalua una expresión hasta que se pare de hacer cambios. Para prevenir que una variable, digamos `X`, sea evaluada sin parar en este modo, simplemente incluya `X='X` como argumento de `ev`. Esta claro que expresiones como `ev (X, X=X+1, infeval)` generarán un bucle infinito.

Símbolo especial: noeval ¶

  El símbolo `noeval` evita la fase de evaluación de `ev`. Es útil conjuntamente con otras variables globales y para poder volver a simplificar expresiones sin tener que evaluarlas otra vez.

Símbolo especial: nouns ¶

  El símbolo `nouns` es una `evflag`, lo que significa que cuando se utilice como una opción de la instrucción `ev`, todas las formas nominales que aparezcan en una expresión las convierte en verbales, esto es, las evalúa. Véanse también `noun`, `nounify`, `verb` y `verbify`.

Símbolo especial: pred ¶

  Cuando se utiliza como argumento en una llamada a `ev (expr)`, `pred` provoca que los predicados (expresiones que se reducen a `true` o `false`) se evalúen.

  Véase `ev`.

  Ejemplo:

      (%i1) 1<2;
      (%o1)                                1 < 2
      (%i2) 1<2,pred;
      (%o2)                                true