0

LaTeX3用の10進浮動小数点ユニットを作成しました(純粋なマクロ...それは大変でした)。特に、どのようx < y < zに解析するかを決定する必要があります。3つのオプションがあります。

  • <左結合の二項演算子として扱うため、x < y < zと同等になり(x < y) < zます。これが何をするかCです:-1 < 0 < 1になる(-1 < 0) < 1、したがって、、1 < 1つまり0

  • <右結合二項演算子として扱うため、x<y<zと同等になりx < (y < z)ます。そのオプションには何の利点もありません。

  • に遭遇した場合は<、さらに比較演算子を先読みし、とx < y < z同等として扱います。(x < y) && (y < z)ここで、yは1回だけ評価されます。これは、ほとんどの非プログラマーが期待することです。そして、かなりの数のLaTeXユーザーがプログラマーではありません。

現時点では最初のオプションを使用していますが、あまり自然ではないようです。オーバーヘッドをかけすぎずに2番目のケースを実装できると思います。するべきか?

その質問は主観的なものなので、客観的な質問をさせてください。どの主流言語がオプション3を選択しますか?のような混合物で何が起こるかについての詳細に興味がありa < b > c == d < e != fます。他の選択肢があれば、それにも興味があります。

4

3 に答える 3

3

簡単な答え:比較シーケンスを解析するのは、それらが「同じ方向を指している」場合、およびを使用しない場合にのみ意味があります!=

長い答え: Pythonでは、に3 > 2 > 1評価されTrueます。a < b > c == d < e != fただし、使用されている実装は、私の意見では無意味なのような式を使用できるため、過度に単純化されていると言わざるを得ません。式はとして解釈され (a < b) and (b > c) and (c == d) and (d < e) and (e != f)ます。簡単なルールですが、意外な結果が得られるので、その解釈は好きではありません。

より予測可能なオプションを提案します。

  • 命題を考えてみましょうxAyBzCw。この命題が「官能的」である場合、それはと同等xAy and yBz and zCwです。「官能性」のために、それは必要です...

    • 値(、、、x)は同じセットの一部でありyzまたはそれらのタイプはそのように統一できます)、wX
    • 関係(A、、)は、、およびのB推移的な二項関係です。C X
    • 順序付けられた関係Aとのすべてのペアに対して、すべての、、;を意味するようなB関係が存在します。この関係にもこれらの制限があります。CxAy and yBzxCzxyz

1 < 2 = a < 4最後のルールに関しては、それはと同等であると言えるだけ1<2 and 2=a and a<4でなく、と言えるようにしたいと思います1<2 and 1<a and 1<4。後者を言うには、どのよう=<相互作用するかを知っている必要があります。

!=推移的ではないため、私のオプションでは使用できません。ただし、、、およびなどの関係がない限り、、、、1 < 3 > 2または2 < 3 > 1と言うこともできません(基本的には、任意のペアを許可する関係になります)。1 < 3 > 1?1?22?11?1

構文の観点から:関係演算子を特別な演算子(より機能的な演算子)として扱いたい場合+は、3番目のオプションのようになります。

于 2012-08-23T14:11:27.600 に答える
2

Pythonは関係演算子をチェーンします。inとをヒットするとis、それらもリレーショナルと見なされるため、これは興味深いものになります。

>>> 1 < 2 in [True, False]
False
>>> 1 < 2 in [2, 4]
True
于 2012-08-23T13:23:46.913 に答える
2

Jは、ステートメントを右から左に評価して、次のようにします。

3 > 2 > 1

最初になります

2 > 1

これはtrueに解決され、1として表されます。したがって、次のようになります。

3 > 1

これもtrueに解決されるため、1になります。反対の演算子<はfalseになりますが、ステートメント全体はたまたまtrueになります。だからあなたはJをもういません。

あなたの主な問題はあなたの最初の表現です:

3 > 2 > 1

人間の略記です

(3 > 2) AND (2 > 1)

したがって、先読みは厄介に思えますが、それは実際に表現に必要なものです。もちろん、他の人が述べているように、Pythonの魔法がない限り。

于 2012-08-23T14:29:15.080 に答える