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:
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 --- .
Para introducir la operación en modo algebraico: pulsa la tecla
'
y en el minibuffer aparecerá el mensajeAlgebraic:
, a partir de los dos puntos escribesqrt(2+3)
y pulsa<RET>
. El buffer anterior ha cambiado a:--- Emacs Calculator Mode --- 1: 2.2360679775 .
¿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
y3
. 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: pulsaQ
... con atención a la mayúscula, porqueq
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:
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 --- .
Introduce en la pila los número
1
,2
y3
por ese orden... te quedará algo como:--- Emacs Calculator Mode --- 3: 1 2: 2 1: 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 .
Necesitamos copiar el valor
3
, que está situado en la posición 2 de la pila: pulsaM--
(sí, la tecla Alt con el guión-
) y después2
, el número de orden en la pila.--- Emacs Calculator Mode --- 4: 2 3: 3 2: 1 1: 3 .
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 normald s
para visualizar los números en modo científicod 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:
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.
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).