Julia에서 아래 첨자를 인덱스로 변환하는 매크로를 작성해 보았습니다.
TL;DR
이상을 이해한 후, 문제가 없으면 계속을 봐 주세요.
@_
이런 매크로를 구현했습니다.
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에서의 이하의 교환 ↓를 봐 :
에서 거기에 참조된 아래의 Stack Overflow 질문을보십시오 :
「할 수 있어」 「아니 무리잖아?」라고 쓰여져 있고, 구체적인 실험예라든지 실장예가 없었기 때문에.
그렇지 않다면 스스로 해보자, 라고 생각해 보고 할 수 있었으므로 굉장히 되어 공개해 버렸다, 라고 하는 것입니다.
공개는 했습니다만 후회는 하고 있지 않습니다.
어떻게 구현했는가?
자세한 내용은 Github 리포지토리 소스를 참조하십시오. DocString 포함으로 96행(그중 DocString만으로 반 이상 사용하고 있습니다).
간단히 설명하면 :
이것만.
좀 더 자세히 말하면,
Meta.parse()
에 곱한 다음 Expr
로 변환 esc()
통과하지 않으면 범위에서 참조 할 수있는 식별자로 식별 할 수 없습니다.AbstractString
/Symbol
/Expr
/다른 하나를 받는 각 구현을 다중 정의) macro _(src)
이런 느낌입니다.
만약 반응이 있으면 조금 자세히 설명합니다.
참조
Reference
이 문제에 관하여(Julia에서 아래 첨자를 인덱스로 변환하는 매크로를 작성해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/antimon2/items/5260dd28b6f049cd453f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)