ジュリアで無限配列を使用する方法
概要
InfiniteArrays.jl
は無限のサイズを持つ配列を使えるようにするパッケージ1で、実際にはレイジー配列と多くの関連がある。レイジー評価とは、配列に計算すべきものがなんであるかは知っているけど、本当に必要になるまでは計算を先延ばしにする方法のことだ。もちろん、コンピューターは無限を理解できないけど、この方法を使ってコンピューターでも無限配列を実装したんだ。
コード
∞
julia> using InfiniteArrays
julia> 3141592 < ∞
true
julia> Inf == ∞
true
julia> Inf === ∞
false
InfiniteArrays.jl
を読み込むと、まず ∞
記号で無限を表せるようになる。無理にパッケージを使わなくても Inf
で無限を表せるけど、こっちの方が直感的に使えるようになるんだ。大小関係の比較では同じ無限の大きさを持つけど、ポインターとして見た場合は違っていて区別できる。
ℵ₀
julia> x = zeros(Int64, ∞);
julia> length(x)
ℵ₀
0でいっぱいの無限配列を作ると、これは無限可算集合になり、その大きさはアレフゼロ $\aleph_{0}$だ。
普通に使える
julia> x[2] = 3; x[94124843] = 7; x
ℵ₀-element LazyArrays.CachedArray{Int64, 1, Vector{Int64}, Zeros{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}} with indices OneToInf():
0
3
0
0
0
0
0
0
0
⋮
julia> sum(x)
10
無限配列だとしても、インターフェイスが大きく変わる訳ではない。普段扱ってる配列と同様に扱えば、考えている通りに動くよ。
全コード
using InfiniteArrays
3141592 < ∞
Inf == ∞
Inf === ∞
x = zeros(Int64, ∞);
length(x)
x[2] = 3; x[94124843] = 7; x
sum(x)
環境
- OS: Windows
- julia: v1.7.3