Julia에서 아래 첨자를 인덱스로 변환하는 매크로를 작성해 보았습니다.

10400 단어 포엠Julia

TL;DR


  • 아무도 사용하지 않는 유용성이 없는 패키지를 만들어 버렸습니다.
  • 이 기사도 자기 만족스러운 포엠 밖에 없고, Julia 를 편리한 도구로서 사용하고 싶은 분에게는 도움이 되지 않습니다.

  • 이상을 이해한 후, 문제가 없으면 계속을 봐 주세요.

    @_



    이런 매크로를 구현했습니다.
  • 아래첨자(예: Fₙ )를 인덱스(예: F[n] )로서 parse 한다.
  • @_ Fₙ = Fₙ₋₁ + Fₙ₋₂F[n] = F[n-1] + F[n-2]로 해석되고 평가된다.

  • 다차원 배열에도 대응.
  • @_ Π₍ᵢ₎₍ⱼ₎ 와 같이 첨자 그룹을 괄호로 묶으면 Π[i, j] 와 같이 해석·평가된다.


  • 설치


    (v1.x) pkg> add https://github.com/antimon2/Sub2Index.jl.git
    

    구체적인 예


    julia> using Sub2Index
    
    julia> F = ones(Int, 10);
    julia> @_ for n = 3:10 Fₙ = Fₙ₋₁ + Fₙ₋₂ end;
           # equivalent to `for n = 3:10 F[n] = F[n-1] + F[n-2] end`
    julia> F
    10-element Array{Int64,1}:
      1
      1
      2
      3
      5
      8
     13
     21
     34
     55
    
    julia> Π = zeros(Int, (10, 10));
    julia> @_ for i = 1:10 Π₍ᵢ₎₍₁₎ = Π₍ᵢ₎₍ᵢ₎ = 1 end;
    julia> @_ for i = 3:10, j = 2:i-1 Π₍ᵢ₎₍ⱼ₎ = Π₍ᵢ₋₁₎₍ⱼ₋₁₎ + Π₍ᵢ₋₁₎₍ⱼ₎ end;
    julia> Π
    10×10 Array{Int64,2}:
     1  0   0   0    0    0   0   0  0  0
     1  1   0   0    0    0   0   0  0  0
     1  2   1   0    0    0   0   0  0  0
     1  3   3   1    0    0   0   0  0  0
     1  4   6   4    1    0   0   0  0  0
     1  5  10  10    5    1   0   0  0  0
     1  6  15  20   15    6   1   0  0  0
     1  7  21  35   35   21   7   1  0  0
     1  8  28  56   70   56  28   8  1  0
     1  9  36  84  126  126  84  36  9  1
    
    

    동작 예



    Binder에서 작동하는 것을 공개했습니다.

    어떤 때 사용할 수 있습니까? 유효한 사용법은 없습니다 (중요). 이유는 다음과 같습니다. 일반 인덱싱 표기법(예: F[n] )은 유형 수가 적습니다. 다차원의 경우(예: @_ Π₍ᵢ₎₍ⱼ₎ )는 쓸데없이 길어져 가독성도 떨어집니다. 무엇보다 아래 첨자로 사용할 수 있는 문자가 매우 적습니다. 그럼 왜 만든거야? 완전히 자기 만족입니다. 계기는, Twitter에서의 이하의 교환 ↓를 봐 :
  • htps : // 라고 해서 r. 이 m/ゔぁl후데데 v/s타츠 s/1226645332630609922
  • htps : // 라고 해서 r. 코 m/오펜소 r세 sbぉg/s타츠 s/1226791023008985088
  • htps : // 라고 해서 r. 이 m/ゔぁl후데데 v/s타츠 s/1226792101079388160
  • htps : // 라고 해서 r. 코 m/오펜소 r세 sb㎉g/s타츠 s/1226795499719733248
  • htps : // 라고 해서 r. 이 m/ゔぁl후데데 v/s타츠 s/1226797883455922176



  • 에서 거기에 참조된 아래의 Stack Overflow 질문을보십시오 :
  • Use subscript as index in julia - Stack Overflow

  • 「할 수 있어」 「아니 무리잖아?」라고 쓰여져 있고, 구체적인 실험예라든지 실장예가 없었기 때문에.

    그렇지 않다면 스스로 해보자, 라고 생각해 보고 할 수 있었으므로 굉장히 되어 공개해 버렸다, 라고 하는 것입니다.
    공개는 했습니다만 후회는 하고 있지 않습니다.

    어떻게 구현했는가?



    자세한 내용은 Github 리포지토리 소스를 참조하십시오. DocString 포함으로 96행(그중 DocString만으로 반 이상 사용하고 있습니다).

    간단히 설명하면 :
  • 식별자로 평가되기 전에 기호를 문자열로 조작하여 아래 첨자 덩어리를 인덱싱으로 변환

  • 이것만.
    좀 더 자세히 말하면,
  • 기호를 문자열로 변환하고 변환하고 Meta.parse()에 곱한 다음 Expr로 변환
  • esc() 통과하지 않으면 범위에서 참조 할 수있는 식별자로 식별 할 수 없습니다.
  • 처리의 메인은 하나의 함수 ( AbstractString/Symbol/Expr/다른 하나를 받는 각 구현을 다중 정의)
  • macro _(src)
    이런 느낌입니다.
    만약 반응이 있으면 조금 자세히 설명합니다.

    참조


  • antimon2/Sub2Index.jl - Github
  • 좋은 웹페이지 즐겨찾기