LoginSignup
4
4

More than 3 years have passed since last update.

Julia その7 いろいろ

Last updated at Posted at 2021-04-17

なんか知らんが、下書きのまま残っていたようなので公開。

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

でもよい。上の方が細かい情報が提供されている。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4