接頭表記は、おそらくより一般的に使用されます...数学では、F(x,y) のような式で使用されます。これは非常に古い慣習ですが、多くの古いシステム (フィートとインチ、便箋) と同様に、より思慮深く設計されたシステムを使用した場合に比べて欠点があります。
ほぼ毎年、大学の初年度の数学の教科書は、少なくとも最初f(g(x))
に出願することを意味することを説明するためにページを無駄にしなければなりません。読む順番で行う方がはるかに理にかなっています。つまり、最初に適用するということです。次に、 「後に」適用したい場合は、単に と言います。g
f
x.f.g
f
h
x.f.g.h
例として、私が最近対処しなければならなかった 3D 回転の問題を考えてみましょう。XYZ 規則に従ってベクトルを回転させたいとします。postfix では、操作はvec.rotx(phi).roty(theta).rotz(psi)
. プレフィックスを使用すると、オーバーロード*
するか()
、操作の順序を逆にする必要がありrotz*roty*rotx*vec
ます。より大きな問題について考えたいときに、常にそれについて考えなければならないのは、エラーが発生しやすく、いらいらさせられます。
たとえば、rotx*roty*rotz*vec
他の人のコードで次のようなものを見つけましたが、それが間違いなのか、ZYX 回転規則が異常なのかわかりませんでした。まだわかりません。プログラムは動いたので、内部的には首尾一貫していましたが、この場合は接頭表記が原因で保守が困難でした。
接頭辞表記に関するもう 1 つの問題は、私たち (またはコンピューター)がメモリ (またはスタック) にf(g(h(x)))
保持する必要がある式を解析すると、 、次に、OK に適用でき、結果に適用できることです。それから結果へ。に比べてメモリ内のものが多すぎます。ある時点で (人間にとっては、コンピューターよりもはるかに早い時期に) メモリが不足します。そのような失敗は一般的ではありませんが、短期記憶を必要としないのに、なぜその扉を開く必要があるのでしょうか。再帰とループの違いのようなものです。f
g
h
h
x
g
f
x.f.g.h
x.f.g.h
もう 1 つf(g(h(x)))
は、括弧が多すぎて Lisp のように見え始めていることです。演算子の優先順位に関しては、後置表記は明確です。
何人かの数学者 (特に Nathan Jacobson) は慣例を変更しようと試みました。なぜなら、順序が本当に重要な非可換代数では接尾辞の方がはるかに扱いやすく、ほとんど役に立たないからです。しかし、私たちはコンピューティングにおいて物事をやり直すチャンスがあるので、この機会を利用すべきです。