4

The Ruby Programming Language の演算子に関するセクションを読んで、演算子の結合性について考えさせられました。ちなみに、これは Ruby に関する質問ではありません。すべての言語に当てはまります。

オペレーターがどちらかの方法で関連付ける必要があることはわかっています。場合によっては、ある方法が他の方法よりも望ましい理由はわかりますが、全体像を見るのに苦労しています。言語設計者が何を左から右、何を右から左にするかを決定するために使用する基準はありますか? それが他の方法よりも一方向であることが「理にかなっている」場合と、それが単なる恣意的な決定である場合がありますか? それとも、これらすべての背後にある壮大な設計がありますか?

4

3 に答える 3

7

通常、構文は「自然」です。

  • を考慮してくださいx - y + z。あなたはそれを左から右にしたいので(x - y) + zx - (y + z).
  • を考慮してくださいa = b = ca = (b = c)ではなくが得られるように、右から左にする必要があります(a = b) = c

選択が「恣意的に」行われたように見える例は思いつきません。

免責事項: 私は Ruby を知らないので、上記の例は C 構文に基づいています。しかし、同じ原則が Ruby にも当てはまると確信しています。

于 2010-10-17T18:18:30.467 に答える
4

1 世紀か 2 世紀の間、すべてを括弧付きで書くことを想像してみてください。どの演算子がその値を最初に結合し、どの演算子が最後に結合する可能性が最も高いかについての経験があります。これらの演算子の結合性を定義できる場合は、数式を読みやすい用語で記述しながら、括弧を最小限に抑える方法で定義する必要があります。つまり、(*) は (+) の前に、(-) は左結合でなければなりません。

ちなみに、Left/Right-Associative は Left/Right-Recursive と同じ意味です。連想という言葉は数学的観点であり、再帰的はアルゴリズムです。(「end-recursive」を参照し、括弧を最も多く書いている場所を調べてください。)

于 2010-10-17T18:59:27.693 に答える
0

comp sci の演算子結合性のほとんどは、数学から直接切り出されています。特に記号論理と代数。

于 2010-10-17T18:18:56.947 に答える