組織モードのテーブルの数式で一般的な算術優先順位を使用する


7

この組織モードのドキュメントを考えると:

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

数式を評価すると、(2番目のセルに)(4/2 * 2 =)4ではなく、驚くべき結果1が生成されます。

どうやら、乗算は組織モードの数式で除算よりも優先度が高いため、予期せぬ結果が(ときどき黙って)生成される可能性があります。

ほとんどのインフィックス表記のように、組織モードの数式で一般的な算術演算子の優先順位を使用する方法はありますか?

回答:


8

calc-evalinitファイルの次の設定により、orgmodeで別の言語を使用できます。

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

も使用できますM-x customize-option RET org-calc-default-modes。キーcalc-languageと値を含むエントリを挿入しますc

言語cはここでの例にすぎません。さらに多くの言語があります。独自の言語を定義することもできます。しかし、そのためにはいくつかのスキルが必要です...

言語モードのファイルcalc-lang.elまたはドキュメントを参照してください。


@VladimirPanteleevエラー訂正ありがとうございます。そのビットが改行だったので気が付かなかった。
トビアス

1

org-modecalc式の計算に使用し、calc非標準の演算子の優先順位を使用します。組織マニュアルから(org) Formula syntax for Calc

式は、Emacsの「Calc」パッケージが理解できる任意の代数式とすることができます。「calc」には「/」が「*」よりも優先順位が低いという非標準の規則があるため、「a / b * c」は「a /(b * c)」として解釈されることに注意してください。

つまり、ブラケットを使用して標準の演算子の優先順位を課す必要があります。つまり、

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

説明をありがとう、しかしそれは述べられたように述べられた質問に答えません。問題は org-modeで一般的な算術優先順位を使用する方法です。組織モードのテーブルを使用するときはいつでも、予期しない結果を回避するために正しい構文を使用することを覚えておくことは、実用的なソリューションではありません。
Vladimir Panteleev

あなたの質問への答え:「org-modeで標準の演算子の優先順位を使用する方法はありますか?」「いいえ」です。他の組み込みの代替手段は、calc式の代わりにlisp式を使用することですが、それは標準の演算子の優先順位からはさらに遠いです。
タイラー、

申し訳ありませんが、あなたの言うとおりだとは思いません。CalcはEmacs Lispで実装されていますよね?したがって、少なくとも、アドバイスなどを通じてコードにパッチを当てることができるはずです。そのマニュアルは、優先順位の異なる複数の言語のサポートについても述べているので、おそらくこれはファイルローカル変数として実行できますか?
ウラジミールパンテレエフ

私は修正された立場です。@ Tobiasの回答を参照してください
タイラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.