사용자 정의 접두사 연산자


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 구문 분석기 소스 코드에서 찾을 수 있습니다 . 대부분이 목록은 유니 코드 범주 Sm (Symbol, math) 의 하위 집합입니다 .

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

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

7
매크로의 힘을 가진 대부분 다른 기호를 중위 연산자로 기술적으로 사용할 수도 있습니다 ! (정말 원한다면). 나는 이것을 @infix 해킹했다 (그것은 juxtaposition에 의한 암묵적 곱셈에 의존한다) julia> using InfixFunctions; @infix α(x, y) = x + y; 1 |α| 2. ( InfixFunctions.jl자신을위한 매크로 연습으로 개발
되었으므로 현재 Julia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.