Hacer que las fórmulas de la tabla del modo org usen una prioridad aritmética

7

Dado este documento de modo org:

| 4 | ? |
#+TBLFM: $2=$1/2*2

La evaluación de las fórmulas produce (en la segunda celda) el sorprendente resultado 1, en lugar de (4/2 * 2 =) 4.

Aparentemente, la multiplicación tiene una precedencia más alta en las fórmulas del modo organización que la división, que puede (ocasionalmente en silencio) producir resultados inesperados.

¿Hay alguna manera de hacer que las fórmulas del modo org utilicen una prioridad de operador aritmético común, como en la mayoría de las anotaciones en corrección?

Vladimir Panteleev
fuente

Respuestas:

8

Puede usar otro idioma para calc-evalin orgmode mediante la siguiente configuración en su archivo de inicio.

(setq org-calc-default-modes (append '(calc-language c) org-calc-default-modes))

También puedes usar M-x customize-option RET org-calc-default-modes. Insertar una entrada con clave calc-languagey valor c.

El lenguaje ces solo un ejemplo aquí. Hay muchos más idiomas. Incluso puedes definir tu propio idioma . Pero para eso necesitas algunas habilidades ...

Ver archivo calc-lang.elo el documento de modos de idioma .

Tobias
fuente
@VladimirPanteleev Gracias por la corrección de errores. No me di cuenta ya que esa parte estaba en el salto de línea.
Tobias
1

org-modeusa calcpara calcular fórmulas y calcusa precedencia de operador no estándar. Del manual de la organización (org) Formula syntax for Calc:

Una fórmula puede ser cualquier expresión algebraica entendida por el paquete 'Calc' de Emacs. Tenga en cuenta que 'calc' tiene la convención no estándar de que '/' tiene menor prioridad que '*', por lo que 'a / b * c' se interpreta como 'a / (b * c)'.

Lo que significa que tendrá que usar paréntesis para imponer la precedencia estándar del operador, es decir

| 4 | ? |
#+TBLFM: $2=($1/2)*2
Tyler
fuente
Gracias por la explicación, pero eso no responde a la pregunta formulada como se indicó. La pregunta es cómo hacer que el modo org utilice la precedencia aritmética común. Simplemente intentar recordar usar la sintaxis correcta para evitar resultados inesperados cada vez que se usan tablas de modo org no es una solución viable.
Vladimir Panteleev
La respuesta a su pregunta: "¿Hay alguna manera de hacer que el modo de organización utilice la precedencia de operador estándar?" no es". La otra alternativa incorporada es usar fórmulas lisp en lugar de fórmulas calc, pero eso está aún más lejos de la precedencia del operador estándar.
Tyler
Lo siento, pero no estoy convencido de que las cosas sean como tú dices. Calc se implementa en Emacs Lisp, ¿verdad? Por lo tanto, como mínimo, debería ser posible parchear su código a través de un consejo o tal. Su manual también habla de soporte para múltiples idiomas con diferentes reglas de precedencia, entonces ¿tal vez esto podría hacerse como una variable local de archivo?
Vladimir Panteleev
Estoy corregido, veo la respuesta de @Tobias
Tyler