ToDo:
まず、version番号だが、前置単項演算子として実装されて来た ~演算子を、中置演算子としても作用可能にする仕様変更を 含んでいるので、major versionを変えるべきだと思う。
また、~を中置演算子として使った構文、a~bは 関数表現ではNot[a,b]と解釈され構文エラーとされるのは 個人的には謎仕様だと思う。
掲示板 にある conststentの意味するところは、
In[1]:= Not[a,b] ???General::narg: Number of arguments is expected 1 in (a~b) Out[1]:= (a~b)
に対する整合性だと思うのだが、整合性問題の本質は関数型で記述した 入力に対してエラーメッセージを表示する際に入力した構文 そのものではなく中置演算子表示に勝手に変換する インタープリター実装の問題と思われる。 原因は、構文解析器が吐き出す構文木に元の表現形(関数 or 演算子)が 記録されないためだが、ユーザーに何処で構文エラーが発生しているかを 正しく伝えるためには構文上意味を持たない空白文字を省略するならまだしも、 意味論的に同じだからと言って構文要素として異なる表現形で提示するのは あまり正しいとは思えない。
他の構文糖(syntax sugar)としての中置演算子表現を持つ関数でも同様の 表示上の問題を抱えている。さらに言えば、関数表現では単一の引数を 認めているが、対応する演算子に単項演算子が存在しない場合は 以下に示すように引数の数が変わった際の表示に一貫性が無い。
In[1]:= Plus[a] Out[1]:= Plus[a] In[2]:= Plus[a,b] Out[2]:= (a+b) In[3]:= Plus[a,b,c] Out[3]:= (a+b+c) In[4]:= Alternatives[a] Out[4]:= Alternatives[a] In[5]:= Alternatives[a,b] Out[5]:= (a|b) In[6]:= Alternatives[a,b,c] Out[6]:= (a|b|c)
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記