ユーザー定義の中置演算子


10

Juliaの演算子は単なる標準関数であり、通常のプレフィックス呼び出し構文を使用して使用できます。

julia> +(1, 2)
3

ただし、これらは中置演算子として使用できる(そして通常使用される)という意味でも特別です。

julia> 1+2
3


独自の中置演算子を定義できますか?もしそうなら、どうですか?

例えば:

julia> α(x, y) = x+y
α (generic function with 1 method)

julia> α(1, 2)
3 # as expected

julia> 1α2
# expected result: 3
ERROR: UndefVarError: α2 not defined
Stacktrace:
 [1] top-level scope at REPL[5]:1

julia> 1 α 2
# expected result: 3
ERROR: syntax: extra token "α" after end of expression
Stacktrace:
 [1] top-level scope at REPL[5]:0

回答:


14

あなたが言ったように、演算子は標準関数であり、他の関数と同じように定義したり操作したりできます。ただし、Juliaのパーサーは、特定の記号セットを中置演算子として認識するように構成されています。名前がこれらのシンボルのいずれかである関数を定義すると、その関数は中置演算子として解析されます。

例えば:

julia> ⊕(x, y) = x+y
 (generic function with 1 method)

# standard prefix function call
julia> ⊕(1, 2)
3

# infix operator call
julia> 12
3

julia> 1  2
3


中置演算子(および関連する優先順位)として認識される記号のリストは、Juliaパーサーのソースコードにあります。ほとんどの場合、このリストはUnicodeカテゴリSm(記号、数学)のサブセットです。

現時点では、たとえば次のものが含まれます。

  • と同じ優先順位で解析され+ます:
+ -        ±                 
                         
  • と同じ優先順位で解析され*ます:
* / ÷ % &   ×                   
          ⦿             
                       

7
技術的には、マクロの機能を備えた他のほとんどすべての記号を中置演算子として使用することもできます。(本当にしたい場合)。私はこれを行う@infix ハック(並列による暗黙の乗算に依存)をしましたjulia> using InfixFunctions; @infix α(x, y) = x + y; 1 |α| 2。(InfixFunctions.jl私自身のためのマクロ演習として開発されました、それはそのままでは
julia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.