なんか知らんが、下書きのまま残っていたようなので公開。
range とイテレータ
pythonでいうrangeに相当するイテレータは:
でつくる
1:4
# 1,2,3,4
初期値と終端値を指定する。両端はインクルーシブなので、これで1から10までの値が生成される。
ステップを指定するには真ん中に書く。
1:2:7
# 1,3,5,7
典型的なインデックスを使うfor文はこれを用いて書く。
for i in 1:10
println(i)
end
range 関数
:
で生成されるRangeオブジェクトは関数で作ることもできる。
この関数は次のように定義されている。
range(start[, stop]; length, stop, step=1)
長さが指定できるので、例えば、1から10までを20等分して0.5刻みの系列をつくる、などということが書きやすい。
range(1, 10, length=20)
ループするインデックスの作り方
配列などの1つ目の要素と2つ目の要素を交互に取り出したい、というようなケースはよくある。配列インデックスが0から始まる言語では、0と1を交互に作ればいいので、カウンタのmod 2をとればいい。
index = counter % 2
しかし、インデックスが1で始まるJuliaのような言語では、1と2を交互につくる必要がある。この場合には、
index = 3 - index
とするらしい。うーん。。1,2,3をループさせるにはどうするんだろう。やっぱりmodをとって1足すのか。
[2021/4/18 追記] twitterで、まさにmodをとって1足すmod1
という関数があることを教えていただいだ。ありがとうございます。
Dict型
辞書はDict
型で表され、Dict
関数で作る。直接のリテラルは用意されていない。これはちょっと意外だ。もっともタプルの列で比較的キレイに定義できるので不要なのだろう。
d = Dict([
("key1", 1),
("key2", 2),
])
下記のようにPairを使ったシンタックスでも記述できる。
d = Dict(
"key1" => 1,
"key2" => 2,
)
辞書は次のように、キーバリューのタプルのリストとしてループできる。
for (k,v) in d
println((k, v))
end
("key2", 2)
("key1", 1)
グローバル変数のリスト
現在のモジュールを知るには@__MODULE__
マクロを用いる。names
関数で指定したモジュールのグローバル変数を列挙できる。
julia> names(@__MODULE__)
9-element Array{Symbol,1}:
:Base
:Core
:InteractiveUtils
:Main
:ans
...
バージョンの取得
using InteractiveUtils
versioninfo()
でもいいし、
VERSION
でもよい。上の方が細かい情報が提供されている。