そして、演算子の優先順位についてどう思いますか?操作が順次実行される言語でのプログラミングは難しいでしょうか?
例:
2 + 3 * 4 == 20
2 +(3 * 4)== 14
わかりました。LISPファミリには、定義による優先順位はありません。この「機能」を使用して、手続き型言語とオブジェクト指向言語について話しましょう。
メッセージの送信はすべて完了しているので、1 + 2 * 3
は、「メッセージをパラメーター2とともにオブジェクト1に送信することによって返されるオブジェクトに、パラメーター3とともに*を送信する」ことを意味します。
通常は数学を書く方法が原因で人を投げます(私を投げました)が、Cの演算子の優先順位を思い出せないので、両方の言語で同じ方法で対処します-()を使用して用語をグループ化します:1 + (2 * 3)
。
これは(ほとんど)すべてRPN表記であるため、優先ルールは必要ありません。ポストフィックスまたはプレフィックス表記(PostScript、LISP ...)を使用するほとんどの言語は同じように動作します。
式は完全に括弧で囲まれているため、LISPタイプの言語は優先順位を必要としません。評価するための優先順位は必要ありません
(sqrt (expt (- x1 x2) 2)
(expt (- y1 y2) 2))
私はJを知っており、それは(@Jerry Coffinによって指摘されているように、その親言語であるAPLとともに)相対的に近いKであると考え、優先順位なしですべてを右から左に評価します。
APLに優先順位はありません。メモリが機能する場合、すべてが右から左にグループ化されます。
奇妙なことに、少なくとも公式な意味では、CもC++も演算子の優先順位はありません。標準はそのように書かれていませんが、(もちろん)ほとんど優先権と同じことを言う別の方法です。 OTOH、それはほとんど同じことです-最終的には、CまたはC++の優先順位テーブルを記述してすべてを正しく行う方法はありません。まったくうまくいかないことがいくつかあります。
まあ、やった。標準の優先順位を持つ標準の演算子がありますが、_1 + 2
_が実際の目標+(1, 2)
であるため、任意の優先順位で演算子を簡単に定義できます。
中置(_1 + 2
_)、前置(_++X
_)および後置(_X++
_)演算子を、任意の結合性(左、右、または両方)で定義できます。