Notxor tiene un blog

Defenestrando la vida


La calculadora de Emacs

A los que usan Emacs no les extraña que entre las muchas cosas que trae nuestro editor favorito, aparezca una calculadora: Calc. Sin embargo, y yo entre ellos, no es fácil encontrar a alguien que la utilice de forma asidua y se entretenga en explicar un poco cómo funciona. Sólo un poco, porque en un artículo como este es imposible abarcarlo todo. Al principio me tenía que forzar a usarla, me costó acostumbrarme a sus idiosincrasias, a la notación polaca inversa y a sus modos de funcionamiento. Ahora me parece una de esas herramientas imprescindibles para el día a día... bueno, imprescindibles es una palabra muy amplia, antes me apañaba sin Calc con una calculadora de escritorio como la de KDE (Kcalc), con una interfaz gráfica a la que estamos más acostumbrados, con pulsar los botones con el ratón, etc. Quiero decir que, puesto que tengo una sesión de Emacs abierta casi el 100% del tiempo, me cuesta muy poco acceder a ella. Aunque no funciona exactamente como esas otras calculadoras: Calc tiene una interface de texto y tienes que aprenderte palabros raros como Notación Polaca Inversa o Pila (para los amantes del guiri: Stack).

Repito el aviso y paso ya al tema, que a lo mejor os interesa más que mi palabrería: este artículo no pretende ser un manual completo, ni tan siquiera un tutorial de uso de una herramienta tan compleja; apenas es una introducción a su uso, el intento de aclarar algunos conceptos básicos para hacerlo y una muestra de lo que puede hacer Emacs para facilitarnos la vida.

Calc

¿Qué es Calc y qué nos proporciona?1 Pues si atendemos a su documentación nos encontramos con algunas características:

  • Elección de modo algebraico o Notación Polaca Inversa (basada en pila).
  • Selección de la precisión de enteros y números decimales.
  • Aritmética de números racionales, números complejos... vectores, matrices, fechas y horas, infinitos, cantidades con unidades, fórmulas algebraicas...
  • Operaciones matemáticas como logaritmos y funciones trigonométricas.
  • Características para programadores: operaciones de bits y números no decimales.
  • Funciones financieras.
  • Funciones de teoría de números, como la factorización de números primos o el módulo aritmético.
  • Características de manipulación algebraica como el cálculo simbólico.
  • Mover datos desde, o hacia, buffers de edición.
  • Modo de insertar y manipular fórmulas de Calc y datos directamente en una buffer de edición.
  • Gráficos utilizando GNUplot.
  • Fácilmente programable utilizando macros de teclado, fórmulas algebraicas o mediante elisp.

Pero, mierda, si yo sólo quiero sumar unas pocas cantidades mientras repaso las facturas. Pues a eso voy, que, ni que decir tiene, es el principal uso que le estoy dando, pero que sepáis que se pueden hacer todas esas cosas... de momento vamos con un ejemplo sencillo. Un cálculo sin muchas pretensiones, utilizando los dos modos principales para comparar.

Primero voy a utilizar el modo algebraico y después el modo de pila, o polaco inverso, para demostrar que ambos métodos llegan a las mismas conclusiones. Para ilustrarlo utilizo un sencillo cálculo: \(\sqrt{(2+3)}\) ... vamos a ello:

  1. Abre Calc con la combinación de teclas C-x * (yo suelo utilizar el * del teclado numérido). Después pide que pulses otra tecla normalmente será c para Calc, pero puedes investigar otros modos con ?2. Mostrará un bufer en la parte inferior de Emacs tal que:

    --- Emacs Calculator Mode ---
        .
    
  2. Para introducir la operación en modo algebraico: pulsa la tecla ' y en el minibuffer aparecerá el mensaje Algebraic:, a partir de los dos puntos escribe sqrt(2+3) y pulsa <RET>. El buffer anterior ha cambiado a:

    --- Emacs Calculator Mode ---
    1:  2.2360679775
        .
    
  3. ¿Cómo se haría en modo pila?: Pues vuelve a la ventana de Calc y pulsa 2, en el minibuffer aparecerá Calc: 2, pulsa <RET>:

    --- Emacs Calculator Mode ---
    2:  2.2360679775
    1:  2
        .
    

    Repite el proceso con el número 3:

    --- Emacs Calculator Mode ---
    3:  2.2360679775
    2:  2
    1:  3
        .
    

    Fíjate que en la pila tenemos almacenados tres valores, el cálculo que hicimos en modo algebraico y los números 2 y 3. Fíjate también en que ambos números ocupan las primeras dos posiciones de abajo. Ahora cuando pulsemos + realizará la suma de ambas.

    --- Emacs Calculator Mode ---
    2:  2.2360679775
    1:  5
        .
    

    No hace falta pulsar <RET> puesto que lo interpreta como un comando de operación, en este caso necesita tener dos valores en la pila, como las operaciones +, -,=*= y /, por ejemplo. Sin embargo, la siguiente operación necesita sólo un valor: pulsa Q... con atención a la mayúscula, porque q es el comando de salir.

    --- Emacs Calculator Mode ---
    2:  2.2360679775
    1:  2.2360679775
        .
    

Algunos pensarán que el modo algebraico es el más directo y sencillo y no hay que teclear tanto. En realidad no es así: si cuentas las pulsaciones de teclas has salido perdiendo: ', s, q, r, t, (, 2, +, 3, ), <RET>... en modo pila: 2, <RET>, 3, <RET>, +, Q.

Pero si lo que necesitas es una calculadora con botones y demás, también puedes tenerla si utilizas Emacs en modo gráfico. En lugar de lanzar Calc con la combinación C-x * c lo haces con la combinación C-x * K (modo Keypad). Y ya tienes un teclado sobre el que pulsar con el ratón.

Si no estás en Emacs y quieres utilizar su calculadora porque ya le has cogido vicio puedes llamarla desde la línea de comandos:

emacs -f full-calc

o, si quieres que aparezca el teclado numérico:

emacs -f full-calc-keypad

Uso de andar por casa

Cuando más utilizo Calc es cuando estoy liado con las facturas. Es bastante agradecido el modo pila pues me permite ir almacenando valores e incluso cambiar su orden pulsando M-<TAB>. Me permite también, copiar valores ya introducidos. Como el camino se demuestra andando, vamos con un ejemplo, también por pasos:

  1. Si no tienes activado Calc actívalo... si te molestan cálculos anteriores borra con la tecla retroceso hasta que te aparezca el habitual estado:

    --- Emacs Calculator Mode ---
        .
    
  2. Introduce en la pila los número 1, 2 y 3 por ese orden... te quedará algo como:

    --- Emacs Calculator Mode ---
    3:  1
    2:  2
    1:  3
        .
    
  3. Sólo por probar y para que se vea vamos a cambiar el orden pulsando una vez M-<TAB>:

    --- Emacs Calculator Mode ---
    3:  2
    2:  3
    1:  1
        .
    
  4. Necesitamos copiar el valor 3, que está situado en la posición 2 de la pila: pulsa M-- (sí, la tecla Alt con el guión -) y después 2, el número de orden en la pila.

    --- Emacs Calculator Mode ---
    4:  2
    3:  3
    2:  1
    1:  3
        .
    
  5. Por juguetear un poco más, imaginemos que necesitamos sumar los últimos dos números pero sin que desaparezcan de la pila. Para ello pulsamos M-2:

    --- Emacs Calculator Mode ---
    6:  2
    5:  3
    4:  1
    3:  3
    2:  1
    1:  3
        .
    

    vemos que ha copiado las dos primeras posiciones de la pila. Ahora pulsamos + y obtenemos el resultado:

    --- Emacs Calculator Mode ---
    5:  2
    4:  3
    3:  1
    2:  3
    1:  4
        .
    

¿Qué demuestra todo esto? Pues básicamente que puedo jugar con la pila para almacenar los valores más habituales e implicarlos en los cálculos, sin destruir lo almacenado. Algo bastante útil cuando en tareas tediosas como la contabilidad se repiten los mismos valores varias veces.

Además de jugar con la pila también se pueden almacenar valores en variables de una manera sencilla. Por ejemplo, basta con pulsar s s y nos pedirá un nombre de variable para guardar el valor de la cabecera (1) de la pila en ella... para devolver el valor de dicha variable a la cabecera basta con pulsar s r. Además con las variables se pueden realizar también cálculos directos sin pasar por la pila, pero eso ya cada uno que se lo mire en la documentación.

Además, por si no tienes suficiente con las variables, también se pueden almacenar y recuperar valores desde los registros de Emacs.

Corrección de errores

Es posible que cuando estamos trabajando nos equivoquemos en alguna operación y queramos deshacer alguna operación. Por ejemplo, porque nos damos cuenta que hemos hecho una resta en lugar de una suma, o al revés: pulsamos la tecla U en mayúscula (undo para los amantes del guiri)... Si nos damos cuenta que, efectivamente lo habíamos hecho bien podemos pulsar D (también en mayúscula) que repetirá la acción (redo para los guiris).

Precisión

Por defecto, Calc suele arrancar con la precisión en 12 decimales, que para la mayoría de cálculos son más que suficientes, pero se puede cambiar a la precisión que se quiera.

Para saber qué precisión estamos utilizando basta ver la línea de estado del buffer de Calc y veremos que pondrá un mensaje del tipo Calc: 12 Deg. La precisión debe ser, al menos, de tres dígitos, sin embargo, si le pedimos una precisión de 2300 decimales no va a protestar.

También podemos cambiar el formato de los números a otros formatos como el de coma fija, la notación científica (hay más modos pero no los uso.

  • d n para visualizar los números en modo normal
  • d s para visualizar los números en modo científico
  • d f para visualizar los números en coma fija.

Conclusión

Con esta introducción apenas he rascado un poco en la superficie de esta herramienta. Suena casi a profanación utilizarla para sólo hacer unas pocas sumas y productos; pero, como dice el refrán: burro grande ande o no ande, y en este caso es así, sabes que es una herramienta completa, compleja y potente. Parece que quieres matar moscas a cañonazos, pero en realidad sirve para lo mucho y para lo poco y cada uno la usará según sus necesidades.

Y si alguien tiene necesidades de cálculo más complejas sabrá que la tiene a mano, para cálculos financieros, para cálculo de vectores o de matrices, para cálculos trigonométricos... Todo sin salir de tu editor favorito y sin separar los dedos del teclado.

Nota al pie de página:

1

He de advertir que mi uso de Calc es mucho más prosaico. Apenas realizo algunos cálculos sencillos y si alguien quiere exprimirle todo el potencial que tiene, debería leerse la documentación que viene con Emacs.

2

Otro modo bastante utilizado es K para keypad que muestra un teclado donde se puede utilizar el ratón (si estás en modo gráfico).


Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en Mastodon y en Diaspora con el nick de Notxor.

También se ha abierto un grupo en Telegram, para usuarios de esa red.

Disculpen las molestias.