問題タブ [associativity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
548 参照

haskell - Haskell におけるモナドの結合規則

(m >>= f) >>= g = m >>= (\x -> f x >>= g)

fととの違いは何\x->f xですか??

同じタイプだと思いますa -> m b。しかし>>=、式の右辺の 2 番目は の型を\x->f xとして扱っているようm bです。何が悪いの?

0 投票する
3 に答える
125 参照

c - C の結合性とシーケンス ポイント

'?' の結合性から は右から左に、任意の 2 つの連続する '?' です。演算子はそのように扱われなければなりませんよね?

今、

私はこれが次のように実行されることを期待しています:

右から左に実行されるため、最初の「?」に遭遇したとき。ステートメントでは、x の値は 0 であり、式は次のようになります。

したがって、私は y が 1 であることを期待していましたが、dev-cpp でゼロを示しています。どこが間違っていますか?

0 投票する
2 に答える
464 参照

haskell - 関数の結合性、交換性などを自動的かつ決定論的にテストする

isAssociative2 つの引数を持つ別の関数を取り、その関数が連想的かどうかを判断する高階関数を構築することは可能ですか?

同様の質問ですが、交換性などの他のプロパティについても同様です。

これが不可能な場合、任意の言語で自動化する方法はありますか? Agda、Coq、または Prolog ソリューションがあれば、興味があります。

考えられるすべての引数の組み合わせをチェックし、決して終了しないブルート フォース ソリューションを思い描くことができます。しかし、「決して終了しない」は、このコンテキストでは望ましくないプロパティです。

0 投票する
2 に答える
268 参照

c - 演算子の C99 結合性 - どこで指定されていますか?

C99 標準では、式は優先順位と結合性を考慮しています。

ドキュメントに演算子が現れる順序が優先順位を下げるため、優先順位は非常によく文書化されています。そのため、関数呼び出しは乗算演算子の前にあり、それは加法演算子の前に来ます。

ただし、左か右かに関係なく、結合性の決定的な説明を見つけることができません。これは、1 つのバリアントと他のバリアントに適用35/5*2されるため、重要です。14(35/5)*2335/(5*2)

セクション6.5 Expressions /3, footnote 74の状態:

この構文は、式の評価における演算子の優先順位を指定します。これは、この副次句の主要な副次句の順序と同じで、優先順位が最も高いものから始まります。

各主要な副次句内では、演算子の優先順位は同じです。左結合性または右結合性は、各節で説明されている式の構文によって示されます。

ただし、次のように乗算の場合を考えます。

6.5.5 乗法演算子
  構文の
    multiplicative-expression:
      cast-expression
      multiplicative-expression * cast-expression
      multiplicative-expression / cast-expression
      multiplicative-expression % cast-expression

  制約

各オペランドには算術型が必要です。演算子のオペランドは%整数型でなければなりません。

  セマンティクス

通常の算術変換がオペランドに対して実行されます。

二項演算子の結果は*、オペランドの積です。

演算子の結果は/、第 1 オペランドを第 2 オペランドで除算した商です。演算子の結果は%剰余です。どちらの操作でも、2 番目のオペランドの値がゼロの場合、動作は未定義です。

整数が除算されると、/演算子の結果は小数部分が破棄された代数商になります。商の場合a/b表現可能である場合、式(a/b)*b + a%bは等しいものとしaます。

そこには結合性について言及しているものは何も見当たりませんし、標準の他の場所にデフォルト設定があるようにも見えません。

ここで何か不足していますか?

0 投票する
3 に答える
12912 参照

sql - SQL で、OR で括弧を使用するとはどういう意味ですか?

例:

例 2:

実際の列名を持つデータベースでは、2 つの異なる結果が得られます。私がそうするなら、括弧付きのものは正しいです:

その後

それらを足し合わせると、正しい答えが得られる...と思います。上記の括弧を使用した最初の例と同じです。

OR テストで優先順位を変更すると、異なる結果が得られるのはなぜですか?

0 投票する
2 に答える
223 参照

c - Cの演算子間で異なる結合性があるのはなぜですか?

C における演算子の結合性について話すと、同じ優先順位を持つ演算子間で結合性に違いがあるのはなぜだろうと思っていました。たとえば、後置インクリメントと後置デクリメントは結合性を残しています。一方、プレフィックスのインクリメントとプレフィックスのデクリメントには右結合性があります。すべて同じ優先順位の演算子に対して左または右の結合性を持つのは簡単ではありませんか?

その背後に何か理由はありますか?

0 投票する
5 に答える
14251 参照

c++ - 浮動小数点の加算と乗算は結合法則ですか?

3つの浮動小数点値を追加し、それらを1と比較しているときに、問題が発生しました。

なぜこれらの値が異なるのでしょうか?

0 投票する
4 に答える
651 参照

c# - この場合、整数が文字列に変換されるのはなぜですか?

以下で何が起こっていますか?

iどちらの場合も文字列に変換されています。私は、演算子の優先順位(この例ではその多くを示していませんが)と評価の方向性の考え方と混同しています。評価は左から右へ、またはその逆で行われる場合があります。表現がどのように評価されるかについての科学を正確に知りません...

i上記の例で文字列に変換され、実際にはコンパイルエラーが発生しないのはなぜですか?

0 投票する
8 に答える
2940 参照

java - Javaの(--i + ++ i)での式の出力

実行時の出力:17
iの最終値は:9

しかし、javaの結合性と優先順位の規則によれば、++ iは最初に実行する必要があります。つまり、右から左に10を与え、次に--iは9を与えます。両方を追加すると、答えは19になります。私はそのようなコードがC/C ++で未定義の動作を与えることを知っていますが、Javaでは、ルールは厳密に定義されており、シーケンスポイントの概念はありません。だから、iamがこれについて本当に混乱しているので、誰かが問題を明確にすることができますか?また、いくつかの本では、ポストインクリメントおよびポストデクリメント演算子はLTR結合法則であると言及されていました。しかし、他のいくつかの本では、すべてのインクリメントとデクリメント(ポストとプレの両方)がRTLに関連付けられています.. !! 誰かがJavaの正しい演算子の優先順位と結合性の表を与えることができますか?

0 投票する
2 に答える
2224 参照

c++ - C++: 入力および出力ストリーム演算子: 結合性

理論上の入力/出力ストリーム演算子の結合性:

左から右へ

(たとえば、これによると:Sait Mary's UniversityのWebサイト

入力/出力ストリーム演算子の結合性:

出力 (MSVCPP 2010、2012):

このサンプルは、関数が RIGHT TO LEFT の順序で呼び出されることを示しています (期待どおりに値が出力されているにもかかわらず、LEFT TO RIGHT)。

質問: このコード サンプルは、LEFT TO RIGHT 実行に関する標準用語とどのように関連していますか? また、関数の実行が RIGHT TO LEFT の順序で実行されるのはなぜですか?