1 @c English version 2011-11-01
3 * Introducción a la evaluación::
4 * Funciones y variables para la evaluación::
15 @node Introducción a la evaluación, Funciones y variables para la evaluación, Evaluación, Evaluación
16 @section Introducción a la evaluación
18 Las fases que se suceden desde que el usuario solicita un cálculo hasta que
19 obtiene el resultado son: la propia solicitud del cálculo, la evaluación,
20 la simplificación y la respuesta.
22 Toda expresión @var{expr} que se introduzca en Maxima será evaluada, de manera
23 que los símbolos que no tengan asociado ningún valor y los números
24 evalúan a sí mismos; en cambio, aquellos símbolos
25 que tengan un valor asociado serán sustituídos por tales valores.
27 Dos ejemplos. En el primero, los símbolos y los números se evalúan
28 a sí mismos; en el segundo ejemplo, al asignarle a la variable @code{a}
29 el valor @code{2}, allá donde se escriba @code{a} será sustituido por dicho valor.
32 (%i1) [a, b, 2, 1/2, 1.0];
34 (%o1) [a, b, 2, -, 1.0]
38 (%i3) [a, sin(a), a^2];
42 Maxima distingue entre funciones en forma verbal y funciones en forma
43 nominal. Las funciones en forma verbal son evaluadas tomando en cuenta
44 los valores dados a sus argumentos; en cambio, las funciones nominales
45 no son evaluadas, aunque sus argumentos tengan valores asignados. Las
46 funciones son susceptibles de ser tratadas de ambos modos; ejemplos
47 típicos son la función de diferenciación @code{diff}
48 y la de integración @code{integrate}.
50 En el siguiente ejemplo se le asigna a la variable @code{a} cierto
51 valor, a continuación se invoca la función @code{diff} en su
52 forma verbal con sus argumentos tomando los valores @code{a*x^2} y @code{x}.
53 Seguidamente se invoca a la misma función @code{diff} en su
54 forma nominal, lo cual se consigue mediante el operador de comilla simple (@code{'});
55 en este caso la función no es evaluada y devuelve una expresión simbólica
56 en la que los argumentos sí han sido evaluados, pues la variable
57 @code{a} es sustituida por el valor @code{1/2}.
66 (%i3) 'diff(a*x^2, x);
75 Sin embargo, no todas las funciones de Maxima sustituyen sus argumentos por
76 sus valores. La documentación para cada función informará si sus argumentos
79 Por ejemplo, la función @code{properties} no evalúa sus argumentos, lo cual
80 resulta práctico para el usuario, ya que en caso contrario debería
81 utilizar el operador de comilla simple @code{'} a fin de poder mostrar las
82 propiedades del símbolo @code{a}. A continuación se muestra
83 como en el primer caso se devuelve una lista vacía, ya que no se
84 le ha encontrado ninguna propiedad al símbolo @code{a}; una vez
85 se le ha asignado el valor @code{2}, la función @code{properties} nos dice
86 que la variable guarda un valor y esto es así porque no ha sustituido
87 el símbolo @code{a} por su valor @code{2}. En consecuencia, la
88 función @code{properties} muestra las propiedades de @code{'a}.
99 La evaluación de símbolos, funciones y expresiones se puede
100 controlar con los operadores de comilla simple (@code{'}) y de doble comilla
101 simple (@code{'@w{}'}). La evaluación se suprime con la comilla simple y se
102 fuerza con la doble comilla simple (que no comilla doble).
104 Con la función @code{ev} se evalúa una expresión dentro de un contexto
105 determinado controlado por el valor de ciertas variables @code{evflag} y
106 funciones de evaluación @code{evfun}.
117 @node Funciones y variables para la evaluación, , Introducción a la evaluación, Evaluación
118 @section Funciones y variables para la evaluación
123 @fnindex Operador comilla
125 El operador comilla simple @code{'} evita la evaluación.
127 Aplicado a un símbolo,
128 la comilla simple evita la evaluación del símbolo.
130 Aplicado a la llamada de una función,
131 la comilla simple evita la evaluación de la función llamada,
132 aunque los argumentos de la función son evaluados (siempre y cuando
133 la evaluación no se evite de otra manera).
134 El resultado es una forma de nombre de la función llamada.
136 Aplicado a una expresión con paréntesis,
137 la comilla simple evita la evaluación de todos los símbolos y llamadas a funciones que hayan en la expresión.
138 @c DUNNO IF THESE EXAMPLES ARE STILL NEEDED -- COVERED BY ITEMS UNDER "Examples"
139 E.g., @code{'(f(x))} significa que no se evalua la expresión @code{f(x)}.
140 @code{'f(x)} (con la comilla simple aplicada a @code{f} en cambio de a @code{f(x)})
141 significa el retorno de la forma de nombre de @code{f} aplicada a @code{[x]}.
143 La comilla simple no evita la simplificación.
145 Cuando el interruptor global @code{noundisp} es @code{true},
146 los nombres se muestran con una comilla simple.
147 Este interruptor siempre tiene como valor @code{true} cuando
148 se muestran definiciones de funciones.
150 Ver también los operadores comilla-comilla @code{'@w{}'} y @code{nouns}.
154 Aplicado a un símbolo,
155 la comilla simple evita la evaluación del símbolo.
175 Aplicado a la llamada de una función,
176 la comilla simple evita la evaluación de la función llamada,
177 aunque los argumentos de la función son evaluados (siempre y cuando
178 la evaluación no se evite de otra manera).
179 El resultado es una forma de nombre de la función llamada.
184 @c integrate (x^2, x, x0, x1);
185 @c 'integrate (x^2, x, x0, x1);
193 (%i3) integrate (x^2, x, x0, x1);
197 (%i4) 'integrate (x^2, x, x0, x1);
211 Aplicado a una expresión con paréntesis, la comilla simple evita
212 la evaluación de todos los símbolos y llamadas a
213 funciones que haya dentro en la expresión.
229 (%i4) '(sqrt(aa) + bb);
235 La comilla simple no evita la simplificación.
238 @c sin (17 * %pi) + cos (17 * %pi);
239 @c '(sin (17 * %pi) + cos (17 * %pi));
242 (%i1) sin (17 * %pi) + cos (17 * %pi);
244 (%i2) '(sin (17 * %pi) + cos (17 * %pi));
248 Internamente, Maxima considera que las operaciones con números
249 decimales de coma flotante son simples simplificaciones.
257 (%o1) .8414709848078965
259 (%o2) .8414709848078965
270 @fnindex Operador comilla-comilla
272 El operador comilla-comilla @code{'@w{}'} (dos comillas simples) modifica la evaluación
273 en las expresiones de entrada.
275 Aplicado a cualquier expresión general @var{expr}, las dos comillas simples hacen que
276 el valor de @var{expr} sea sustituido por @var{expr} en la expresión de entrada.
278 Aplicado al operador de una expresión, el operador comilla-comilla hace que el operador
279 pase de ser un nombre a ser un verbo, a menos que ya sea un verbo.
281 El operador comilla-comilla es aplicado por el analizador sintáctico de entrada;
282 no se almacena como una parte de la expresión de entrada analizada.
283 Este operador se aplica siempre tan pronto como es detectado y no puede ser comentado con
284 una comilla simple. De esta manera, el operador comilla-comilla provoca la evaluación de
285 una expresión cuando ésta no estaba previsto que fuese evaluada, como en la
286 definición de funciones, expresiones lambda y expresiones comentadas con una comilla simple
289 El operador comilla-comilla es reconocido tanto por @code{batch} como por @code{load}.
291 Véanse también el operador comilla simple @code{'} y @code{nouns}.
295 Aplicado a cualquier expresión general @var{expr}, las dos comillas simples hacen que
296 el valor de @var{expr} sea sustituido por @var{expr} en la expresión de entrada.
299 @c expand ((a + b)^3);
302 @c [aa : cc, bb : dd, cc : 17, dd : 29];
303 @c foo_1 (x) := aa - bb * x;
307 @c foo_2 (x) := ''aa - ''bb * x;
309 @c [x0 : x1, x1 : x2, x2 : x3];
315 (%i1) expand ((a + b)^3);
317 (%o1) b + 3 a b + 3 a b + a
320 (%o2) [expand((b + a) ), b + 3 a b + 3 a b + a ]
323 (%o3) [expand((b + a) ), b + 3 a b + 3 a b + a ]
324 (%i4) [aa : cc, bb : dd, cc : 17, dd : 29];
325 (%o4) [cc, dd, 17, 29]
326 (%i5) foo_1 (x) := aa - bb * x;
327 (%o5) foo_1(x) := aa - bb x
332 (%i8) ''(foo_1 (10));
334 (%i9) foo_2 (x) := ''aa - ''bb * x;
335 (%o9) foo_2(x) := cc - dd x
338 (%i11) [x0 : x1, x1 : x2, x2 : x3];
348 Aplicado al operador de una expresión, la
349 doble comilla simple hace que el operador
350 pase de ser nominal a verbal, a menos que ya sea un verbo.
353 @c declare (foo, noun);
354 @c foo (x) := x - 1729;
359 (%i1) declare (foo, noun);
361 (%i2) foo (x) := x - 1729;
362 (%o2) ''foo(x) := x - 1729
370 El operador comilla-comilla es aplicado por el analizador sintáctico de entrada;
371 no se almacena como una parte de la expresión de entrada analizada.
374 @c [aa : bb, cc : dd, bb : 1234, dd : 5678];
376 @c display (_, op (_), args (_));
378 @c display (_, op (_), args (_));
381 (%i1) [aa : bb, cc : dd, bb : 1234, dd : 5678];
382 (%o1) [bb, dd, 1234, 5678]
385 (%i3) display (_, op (_), args (_));
390 args(cc + aa) = [cc, aa]
395 (%i5) display (_, op (_), args (_));
400 args(dd + bb) = [dd, bb]
405 El operador comilla-comilla provoca la evaluación de
406 una expresión cuando ésta no estaba previsto que fuese evaluada, como en la
407 definición de funciones, expresiones lambda y expresiones comentadas con una comilla simple
411 @c foo_1a (x) := ''(integrate (log (x), x));
412 @c foo_1b (x) := integrate (log (x), x);
413 @c dispfun (foo_1a, foo_1b);
414 @c integrate (log (x), x);
415 @c foo_2a (x) := ''%;
417 @c dispfun (foo_2a, foo_2b);
418 @c F : lambda ([u], diff (sin (u), u));
419 @c G : lambda ([u], ''(diff (sin (u), u)));
420 @c '(sum (a[k], k, 1, 3) + sum (b[k], k, 1, 3));
421 @c '(''(sum (a[k], k, 1, 3)) + ''(sum (b[k], k, 1, 3)));
424 (%i1) foo_1a (x) := ''(integrate (log (x), x));
425 (%o1) foo_1a(x) := x log(x) - x
426 (%i2) foo_1b (x) := integrate (log (x), x);
427 (%o2) foo_1b(x) := integrate(log(x), x)
428 (%i3) dispfun (foo_1a, foo_1b);
429 (%t3) foo_1a(x) := x log(x) - x
431 (%t4) foo_1b(x) := integrate(log(x), x)
434 (%i5) integrate (log (x), x);
436 (%i6) foo_2a (x) := ''%;
437 (%o6) foo_2a(x) := x log(x) - x
438 (%i7) foo_2b (x) := %;
440 (%i8) dispfun (foo_2a, foo_2b);
441 (%t8) foo_2a(x) := x log(x) - x
446 (%i10) F : lambda ([u], diff (sin (u), u));
447 (%o10) lambda([u], diff(sin(u), u))
448 (%i11) G : lambda ([u], ''(diff (sin (u), u)));
449 (%o11) lambda([u], cos(u))
450 (%i12) '(sum (a[k], k, 1, 3) + sum (b[k], k, 1, 3));
451 (%o12) sum(b , k, 1, 3) + sum(a , k, 1, 3)
453 (%i13) '(''(sum (a[k], k, 1, 3)) + ''(sum (b[k], k, 1, 3)));
454 (%o13) b + a + b + a + b + a
462 @deffn {Función} ev (@var{expr}, @var{arg_1}, @dots{}, @var{arg_n})
463 Evalua la expresión @var{expr} en el entorno especificado
464 por los argumentos @var{arg_1}, ..., @var{arg_n}.
465 Los argumentos son interruptores (Variables Booleanas), variables de
466 asignación, ecuaciones y funciones.
467 @code{ev} retorna el resultado (otra expresión) de la evaluación.
469 La evaluación se realiza por etapas, como sigue:
473 Primero se configura el entorno de acuerdo a los argumentos los
474 cuales pueden ser algunos o todos de la siguiente lista:
478 @code{simp} causa que @var{expr} sea simplificada sin importar el valor de la variable interruptor @code{simp} la cual inhibe la simplificación cuando su valor es @code{false}.
480 @code{noeval} suprime la fase de evaluación de @code{ev} (Vea el paso (4) más adelante).
481 Esto es muy útil en conjunción con otras variables interruptor y causan en @var{expr} que sea resimplificada sin ser reevaluada.
483 @code{nouns} causa la evaluación de las formas nominales
484 (típicamente funciones sin evaluar tales como
485 @code{'integrate} or @code{'diff}) en @code{expr}.
487 @code{expand} causa expansión.
489 @code{expand (@var{m}, @var{n})} causa expansión, asignando los valores de @code{maxposex} y
490 @code{maxnegex} a @var{m} y @var{n}, respectivamente.
492 @code{detout} hace que cualesquiera matrices inversas calculadas en @var{expr} conserven su determinante fuera de la inversa, en vez de que divida a cada elemento.
494 @code{diff} realiza todas las diferenciaciones indicadas en @var{expr}.
496 @code{derivlist (@var{x}, @var{y}, @var{z}, ...)} realiza sólo las diferenciaciones con respecto a las variables indicadas.
498 @code{risch} hace que las integrales presentes en @var{expr} se evalúen mediante
499 el algoritmo de Risch. Véase también @code{risch}. Cuando se utiliza el
500 símbolo especial @code{nouns}, se aplica la rutina estándar de integración.
502 @code{float} provoca la conversión de los números racionales no-enteros a números decimales de coma flotante.
504 @code{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 @var{expr} las cuales hayan sido declaradas como variables numéricas sean reemplazadas por sus respectivos valores. Esto también configura la variable interruptor @code{float} a @code{true}.
506 @code{pred} provoca la evaluación de los predicados (expresiones las cuales se evaluan a @code{true} o @code{false}).
508 @code{eval} provoca una post-evaluación extra de @var{expr} (véase el paso (5) más adelante), pudiendo aparecer
509 @code{eval} varias veces; por cada aparición de @code{eval}, la expresión es reevaluada.
511 @code{A}, donde @code{A} es un átomo declarado como una variable de tipo interruptor, (Vea @code{evflag})
512 causa que @code{A} tenga como valor @code{true} durante
513 la evaluación de @var{expr}.
515 @code{V: expresion} (o alternativamente @code{V=expresion}) causa que
516 @code{V} tenga el valor de @code{expresion} durante la evaluación
517 de @var{expr}. Notese que si @code{V} es una opción Maxima, entonces
518 @code{expresion} se usa como su valor durante la evaluación de
519 @var{expr}. Si más de un argumento de @code{ev} es de este
520 tipo entonces el vínculo se hace en paralelo. Si @code{V} es una
521 expresión no atómica entonces se hace una sustitución más que
524 @code{F} donde @code{F}, un nombre de función, ha sido declarado para
525 ser una función de evaluación (Vea @code{evfun}) causa que
526 @code{F} sea aplicada a @var{expr}.
528 Cualquier otro nombre de función (e.g., @code{sum}) causa la evaluación de las ocurrencias de esos nombres en @code{expr} como si ellos fueran
531 En adición de que una función ocurra en @var{expr} (digamos @code{F(x)}) puede ser definida localmente para el propósito de esta evaluación
532 de @var{expr} pasando @code{F(x) := expresion} como un argumento a
535 Si un átomo no mencionado anteriormente o una variable o expresión
536 con subíndices fueran pasadas como un argumento, esta es evaluada y
537 si el resultado es una ecuación o una asignación entonces el
538 vínculo o sustitución se llevará a cabo. Si el resultado es una
539 lista entonces los miembros de la lista tratados como si ellos fueran
540 argumentos adicionales pasados a @code{ev}. Esto permite que una
541 lista de argumentos sea pasada (e.g., @code{[X=1, Y=A**2]}) o una lista
542 de nombres de ecuaciones (e.g., @code{[%t1, %t2]} donde @code{%t1} y
543 @code{%t2} son ecuaciones) tal como lo que es retornado por
547 Los argumentos de @code{ev} pueden ser pasados en cualquier orden con excepción de la sustitución de ecuaciones las cuales son manipuladas en
548 secuencia, de izquierda a derecha y las funciones de evaluación las
549 cuales son compuestas, e.g., @code{ev (@var{expr}, ratsimp, realpart)}
550 es manipulada como @code{realpart (ratsimp (@var{expr}))}.
552 Los interruptores @code{simp}, @code{numer} y @code{float}
553 pueden también ser configurados localmente en una sentencia block, o
554 globalmente en Maxima para que su efecto permanezca hasta que
557 Si @var{expr} es una Expresión Racional Canónica (CRE, por sus siglas en inglés), entonces la expresión retornada por @code{ev} es también
558 de tipo CRE, siempre que los interruptores @code{numer} y @code{float} no sean @code{true}.
561 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
562 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 @var{expr} son reemplazadas por sus valores globales, excepto por aquellos que aparezcan en esa lista.
563 Usualmente, @var{expr} es sólo una etiqueta o un @code{%}
564 (como en @code{%i2} en el ejemplo de más abajo) así que
565 este paso simplemente recupera la expresión a la que hace referencia
566 la etiqueta y así @code{ev} puede trabajarla.
569 Si algunas sustituciones son indicadas por los argumentos, ellas
570 serán llevadas a cabo ahora.
573 La expresión resultante es también reevaluada (a menos que uno de
574 los argumentos fuese @code{noeval}) y simplificada de acuerdo a los
575 argumentos. Notese que cualquier llamada a una función en @var{expr}
576 será llevada a cabo después de que las variables sean evaluadas
577 en ella y que @code{ev(F(x))} pueda comportarse como @code{F(ev(x))}.
580 Por cada aparición de @code{eval} en los argumentos, se repetirán los pasos (3) y (4).
586 @c sin(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
587 @c ev (%, numer, expand, diff, x=2, y=1);
590 (%i1) sin(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
592 (%o1) cos(y) + sin(x) + -- (sin(w)) + (w + 1)
594 (%i2) ev (%, numer, expand, diff, x=2, y=1);
596 (%o2) cos(w) + w + 2 w + 2.449599732693821
600 Una sintaxis alternativa de alto nivel ha sido desarrollada para @code{ev}
601 por medio de la cual se pueden escribir solamente sus argumentos, sin
602 el comando @code{ev()}; se trata de una forma de escritura simplificada:
605 @var{expr}, @var{arg_1}, ..., @var{arg_n}
608 Esta sintaxis no está permitida dentro de otras expresiones, como
609 funciones, bloques, etc.
611 Nótese el proceso de vínculo en paralelo en el siguiente ejemplo:
614 (%i3) programmode: false;
616 (%i4) x+y, x: a+y, y: 2;
619 (%i6) -3*x + 2*y = -4$
620 (%i7) solve ([%o5, %o6]);
633 (%i9) x + 1/x > gamma (1/2);
635 (%o9) x + - > sqrt(%pi)
637 (%i10) %, numer, x=1/2;
638 (%o10) 2.5 > 1.772453850905516
647 @defvr {Símbolo especial} eval
648 Como argumento en una llamada a @code{ev (@var{expr})}, @code{eval}
649 fuerza una evaluación extra de @var{expr}.
651 Véase también @code{ev}.
656 @c [a:b,b:c,c:d,d:e];
663 (%i1) [a:b,b:c,c:d,d:e];
680 @defvr {Propiedad} evflag
681 Cuando un símbolo @var{x} goza de la propiedad @code{evflag},
682 las expresiones @code{ev(@var{expr}, @var{x})} y @code{@var{expr}, @var{x}}
683 (en modo interactivo) equivalen a @code{ev(@var{expr}, @var{x} = true)}.
684 Esto es, a @var{x} se le asigna @code{true} al tiempo que se evalúa @var{expr}.
686 La expresión @code{declare(@var{x}, evflag)} dota a la variable @var{x}
687 de la propiedad @code{evflag}.
689 Los interruptores que tienen la propiedad @code{evflag} son:
692 algebraic cauchysum demoivre
693 dotscrules %emode %enumer
694 exponentialize exptisolate factorflag
695 float halfangles infeval
696 isolate_wrt_times keepfloat letrat
697 listarith logabs logarc
699 m1pbranch numer_pbranch programmode
700 radexpand ratalgdenom ratfac
701 ratmx ratsimpexpons simp
702 simpproduct simpsum sumexpand
711 @c sin (1/2), float=true;
716 @c sum (1/k^2, k, 1, inf);
717 @c sum (1/k^2, k, 1, inf), simpsum;
718 @c declare (aa, evflag);
719 @c if aa = true then YES else NO;
720 @c if aa = true then YES else NO, aa;
727 (%i2) sin (1/2), float;
728 (%o2) 0.479425538604203
729 (%i3) sin (1/2), float=true;
730 (%o3) 0.479425538604203
739 (%i8) sum (1/k^2, k, 1, inf);
747 (%i9) sum (1/k^2, k, 1, inf), simpsum;
752 (%i10) declare (aa, evflag);
754 (%i11) if aa = true then YES else NO;
756 (%i12) if aa = true then YES else NO, aa;
765 @defvr {Propiedad} evfun
766 Cuando la función @var{F} goza de la propiedad @code{evfun},
767 las expresiones @code{ev(@var{expr}, @var{F})} y @code{@var{expr}, @var{F}}
768 (en modo interactivo) equivalen a @code{@var{F}(ev(@var{expr}))}.
770 Si se especifican dos o más funciones, @var{F}, @var{G}, etc., como poseedoras
771 de la propiedad @code{evfun}, éstas se aplican en el mismo orden en el que han sido
772 especificadas como tales.
774 La expresión @code{declare(@var{F}, evfun)} dota a la función @var{F}
775 de la propiedad @code{evfun}.
777 Las funciones que tienen la propiedad @code{evfun} por defecto son:
779 @c FOLLOWING LIST CONSTRUCTED FROM LIST UNDER (prog1 '(evfun properties) ...)
780 @c NEAR LINE 2643 IN mlisp.lisp AT PRESENT (2004/11).
782 bfloat factor fullratsimp
783 logcontract polarform radcan
784 ratexpand ratsimp rectform
785 rootscontract trigexpand trigreduce
794 @c cos(4 * x) / sin(x)^4;
795 @c cos(4 * x) / sin(x)^4, trigexpand;
796 @c cos(4 * x) / sin(x)^4, trigexpand, ratexpand;
797 @c ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
798 @c declare ([F, G], evfun);
799 @c (aa : bb, bb : cc, cc : dd);
811 (%i2) x^3 - 1, factor;
813 (%o2) (x - 1) (x + x + 1)
814 (%i3) factor (x^3 - 1);
816 (%o3) (x - 1) (x + x + 1)
817 (%i4) cos(4 * x) / sin(x)^4;
822 (%i5) cos(4 * x) / sin(x)^4, trigexpand;
824 sin (x) - 6 cos (x) sin (x) + cos (x)
825 (%o5) -------------------------------------
828 (%i6) cos(4 * x) / sin(x)^4, trigexpand, ratexpand;
831 (%o6) - --------- + ------- + 1
834 (%i7) ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
837 (%o7) - --------- + ------- + 1
840 (%i8) declare ([F, G], evfun);
842 (%i9) (aa : bb, bb : cc, cc : dd);
854 (%i15) G (F (ev (aa)));
862 @defvr {Variable opcional} infeval
863 Habilita el modo de "evaluación infinita". @code{ev} repetidamente
864 evalua una expresión hasta que se pare de hacer cambios. Para prevenir
865 que una variable, digamos @code{X}, sea evaluada sin parar en este modo,
866 simplemente incluya @code{X='X} como argumento de @code{ev}.
867 Esta claro que expresiones como @code{ev (X, X=X+1, infeval)} generarán un bucle infinito.
872 @defvr {Símbolo especial} noeval
873 El símbolo @code{noeval} evita la fase de evaluación de @code{ev}.
874 Es útil conjuntamente con otras variables globales y para poder volver a
875 simplificar expresiones sin tener que evaluarlas otra vez.
881 @defvr {Símbolo especial} nouns
882 El símbolo @code{nouns} es una @code{evflag}, lo que significa
883 que cuando se utilice como una opción de la instrucción @code{ev},
884 todas las formas nominales que aparezcan en una expresión las convierte en
885 verbales, esto es, las evalúa. Véanse también @code{noun}, @code{nounify},
886 @code{verb} y @code{verbify}.
892 @defvr {Símbolo especial} pred
893 Cuando se utiliza como argumento en una llamada a
894 @code{ev (@var{expr})}, @code{pred} provoca que los
895 predicados (expresiones que se reducen a @code{true} o
896 @code{false}) se evalúen.