[julia] 사용자 정의 접두사 연산자

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



답변

앞서 말했듯이 연산자는 표준 함수일 뿐이며 다른 함수와 마찬가지로 정의하고 조작 할 수 있습니다. 그러나 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 구문 분석기 소스 코드에서 찾을 수 있습니다 . 대부분이 목록은 유니 코드 범주 Sm (Symbol, math) 의 하위 집합입니다 .

현재로서는 예를 들면 다음과 같습니다.

  • 다음과 같은 우선 순위로 구문 분석되었습니다 +.
+ -        ±                 
                         
  • 다음과 같은 우선 순위로 구문 분석되었습니다 *.
* / ÷ % &   ×                   
          ⦿             
                       


답변