Julia Base package

Baseは基本的な機能を含む標準モジュールであり、Juliaの基礎ライブラリである。ほとんどの場合にBaseが必要なので、全てのモジュールは暗黙的に「using Base」を含む。

Base.ARGS

Juliaプログラムに渡されたコマンドライン引数は、ARGS定数に文字列の配列として格納されている。

println(string(length(ARGS), " argument(s) were passed to ", PROGRAM_FILE))
for arg in ARGS
  println(arg)
end

上記プログラムを実行すると、スクリプトに渡した引数が表示される。

$ julia example.jl foo bar baz
3 argument(s) were passed to example.jl
foo
bar
baz

Base.PROGRAM_FILE

コマンドラインからJuliaに渡されたスクリプト名を取得するには、PROGRAM_FILE定数を参照すればよい。

println(PROGRAM_FILE)

上記プログラムを実行すると、Juliaで実行したスクリプト名が表示される。

$ julia example.jl
example.jl

Base.stderr

Base.stderr は標準エラーストリームを参照するグローバル変数である。

標準エラーへ出力するには、標準エラーストリームを参照するグローバル変数stderrを使う。

標準エラーへ改行ありで出力するには、println関数の第1引数にstderrを指定する。

println(stderr, "ファイルのオープンに失敗しました。")

標準エラーへ改行なしで出力するには、print関数またはwrite関数の第1引数にstderrを指定する。

print(stderr, "ファイルのオープンに失敗しました。")
write(stderr, "ファイルのオープンに失敗しました。")

Base.VERSION

Juliaのバージョンを取得するには、VERSION定数を参照すればよい。

println(VERSION)

上記プログラムを実行すると、Juliaのバージョンが表示される。

$ julia example.jl
1.1.0

Juliaのバージョンを判定するには、VERSION定数をバージョン番号リテラルと比較する。バージョン番号リテラルは、文字列の前にvを付ける。

if v"1.1" <= VERSION < v"1.2-"
  println("バージョン1.1.x")
end

Base.Dict

JuliaにおけるDictとは、キーと値の組み合わせを持つデータのコレクションである。キーは重複せず、一意となる。いわゆる連想配列である。

Julia言語には、次に示すコレクションがある。

Juliaのコレクション
コレクション 順序性 要素の名前 値の重複 値の追加・変更
Tuple あり なし 不可
NamedTuple あり あり 不可
Array あり なし
Dict なし あり
Set なし なし 不可 不可

Dictを作成するには、キーと値のペアを指定する。

d = Dict("GOOG" => 2868.12, "AMZN" => 3450.00, "FB" => 376.53)
Dictの例
キー
GOOG 2868.12
AMZN 3450.00
FB 376.53

キーと値の型を明示的に指定することもできる。

d = Dict{String, Float32}("GOOG" => 2868.12, "AMZN" => 3450.00, "FB" => 376.53)
Dictの例
キー
String

Float32
GOOG 2868.12
AMZN 3450.00
FB 376.53

Dictのイテレーションでは、キーと値を取り出すことができる。

x = Dict("a" => 1, "b" => 2)

for (key, value) in x
  println(key)
end

Dictに指定したキーが含まれるかどうかは、haskey関数で調べられる。

julia> x = Dict("a" => 1)
Dict{String,Int64} with 1 entry:
  "a" => 1

julia> haskey(x, "a")
true

julia> haskey(x, "b")
false

Dictにキーと値を追加するには、次のようにする。

x = Dict("a" => 1)
x["b"] = 2

辞書はジェネレータを使って作成することもできる。

Dict(i => f(i) for i = 1:10)

辞書に特定のキーに対するマッピングがあるかどうかを確認できる。

d = Dict('foo'=>2 'bar'=>3)

if haskey(d, 'foo')
  println(get(d, 'foo', 0))
end

deleteat!()

deleteat!() はコレクションの指定位置から要素を削除する関数である。

julia> x = [1, 2, 3]
3-element Array{Int64,1}:
 1
 2
 3

julia> deleteat!(x, 2)
2-element Array{Int64,1}:
 1
 3

eltype()

eltype() はコレクションの型を返す関数である。

julia> eltype((1, 2))
Int64

julia> eltype(("foo", "bar"))
String

julia> eltype((1, "foo"))
Any

empty!()

empty!() はコレクションを空にする関数である。ただし、タプルや名前付きタプルを空にすることはできない。

julia> x = [1, 2]
2-element Array{Int64,1}:

julia> empty!(x)
Int64[]

julia> x = Dict("a" => 1, "b" => 2)
Dict{String,Int64} with 2 entries:
  "b" => 2
  "a" => 1

julia> empty!(x)
Dict{String,Int64}()

julia> x = Set([1, 2])
Set{Int64} with 2 elements:
  2
  1

julia> empty!(x)
Set{Int64}()

endswith()

Julia における Base.endswith() は、指定した文字列で終わるかどうかを返す関数である。

julia> endswith("Julia", "ia")
true

julia> endswith("Julia", "IA")
false

error()

指定したメッセージでErrorExceptionを発生させる。

error("wrong argument")

exit()

プログラムを停止する。既定の終了コードは0で、プログラムが正常に完了したことを示す。

exit()

終了コードを使用してプログラムを停止する。

exit(1)

insert!()

insert!() はコレクションの指定位置に要素を挿入にする関数である。

julia> x = [1, 2]
2-element Array{Int64,1}:
 1
 2

julia> insert!(x, 2, 3)
3-element Array{Int64,1}
 1
 3
 2

isempy()

isempty() はコレクションが空かどうかをブール値で返す関数である。

julia> isempty(())
true

julia> isempty((1))
false

julia> isempty((a = 1, b = 2))
false

julia> isempty([])
true

julia> isempty([1])
false

julia> isempty(Dict())
false

julia> isempty(Dict("a"=>1))
true

julia> isempty(Set([]))
true

julia> isempty(Set([1]))
false

join()

join() は指定した文字列のコレクションを結合して返す関数である。

julia> join(["Julia", "Language"], "-")
"Julia-Language"

length()

length() はコレクションの要素数を返す関数である。

julia> length((1, 2))
2

julia> length((a = 1, b = 2))
2

julia> length([1, 2])
2

julia> length(Dict("a"=>1, "b"=>2))
2

julia> length(Set([1, 2]))
2

occursin

occursinは第1引数に指定した文字列が第2引数に含まれていればtrue、含まれていなければfalseを返す。第1引数には正規表現を指定できる。

file = "index.html"
if occursin(r"[a-zA-Z]*html$", file)
  println(file)
end

pop!()

pop!() はコレクションの末尾から要素を取り出す関数である。取り出した要素はコレクションから削除される。

julia> x = [1, 2, 3]
3-element Array{Int64,1}:
 1
 2
 3

julia> pop!(x)
3

julia> x
2-element Array{Int64,1}:
 1
 2

popfirst!()

popfirst!() はコレクションの先頭から要素を取り出す関数である。取り出した要素はコレクションから削除される。

julia> x = [1, 2, 3]
3-element Array{Int64,1}:
 1
 2
 3

julia> popfirst!(x)
1

julia> x
2-element Array{Int64,1}:
 2
 3

push!()

push!() はコレクションの末尾に要素を追加する関数である。

julia> x = [1, 2]
2-element Array{Int64,1}:
 1
 2

julia> push!(x, 3)
3-element Array{Int64,1}:
 1
 2
 3

pushfirst!()

push!() はコレクションの先頭に要素を追加する関数である。

julia> x = [2, 3]
2-element Array{Int64,1}:
 2
 3

julia> pushfirst!(x, 1)
3-element Array{Int64,1}:
 1
 2
 3

run()

run() は外部プログラムを実行する関数である。

julia> run(`ls -a`)
.bash_history .bashrc

startswith()

startswith() は指定した文字列で始まるかどうかを返す関数である。

julia> startswith("Julia", "Ju")
true

julia> startswith("Julia", "JU")
false

stat()

ファイルの状態を取得するには、stat関数を使う。

stat(file)

stat関数は、ファイルに関する情報を含む構造体を返す。構造体のフィールドは次のとおり。

ファイル構造体
フィールド 説明
size ファイルのサイズ(バイト単位)
device ファイルを含むデバイスのID
inode ファイルのiノード番号
mode ファイルの保護モード
nlink ファイルへのハード・リンクの数
uid ファイル所有者のユーザーID
gid ファイル所有者のグループID
rdev このファイルがデバイスを参照している場合、参照しているデバイスのID
blksize ファイル・システムの推奨ブロック・サイズ
blocks 割り当てられたブロックの数
mtime ファイルが最後に更新された時刻(Unixタイムスタンプ)
ctime ファイルが作成された時刻(Unixタイムスタンプ)

Julia言語でファイルのサイズと最終更新日時を取得する例を次に示す。

julia> s = stat("example.jl")
StatStruct(mode=0o100666, size=2507)

julia> s.size
2507

julia> using Dates

julia> Dates.unix2datetime(s.mtime)
2021-02-06T06:36:15.653

ソート

Julia 言語で配列の値をソート(並び替え)するには、sort 関数を使う。

julia> sort([3, 1, 2])
3-element Array{Int64,1}:
 1
 2
 3

デフォルトでは昇順(小さい順)でソートされる。

降順

降順(大きい順)にソートするには、rev 引数に true を指定する。

julia> sort([3, 1, 2], rev=true)
3-element Array{Int64,1}:
 3
 2
 1

アルゴリズム

alg 引数にソートのアルゴリズムを指定することもできる。次のアルゴリズムを指定できる。

julia> sort([3, 1, 2], alg=InsertionSort)
3-element Array{Int64,1}:
 1
 2
 3

split()

split() は指定した文字列で分割する関数である。

julia> split("Julia-Language", "-")
2-element Array{SubString{String},1}:
 "Julia"
 "Language"

union()

unioin() はコレクションの和集合を返す関数である。引数に渡したコレクションのすべての値を含むコレクションを返す。

julia> union((1, 2, 3), (2, 3, 4))
4-element Array{Int64,1}:
 1
 2
 3
 4

julia> union([1, 2, 3], [2, 3, 4])
4-element Array{Int64,1}:
 1
 2
 3
 4

julia> union((1, 2), (3, 4), (5, 6))
6-element Array{Int64,1}:
 1
 2
 3
 4
 5
 6

intersect()

intersect() はコレクションの積集合を返す関数である。引数に渡したコレクションのすべてに含まれる値のコレクションを返す。

julia> intersect((1, 2, 3), (2, 3, 4))
2-element Array{Int64,1}:
 2
 3

julia> intersect([1, 2, 3], [2, 3, 4])
2-element Array{Int64,1}:
 2
 3

julia> intersect((1, 2, 3), (2, 3, 4), (3, 4, 5))
1-element Array{Int64,1}:
 3

open()

Juliaでファイルをオープンするには、open関数を使う。

try
  f = open("example.txt")
  close(f)
catch
  println("ファイルのオープンに失敗しました。")
end

ファイルのオープンに失敗すると、SystemError例外がスローされる。

ファイルをreadモードでオープンする。

f = open("example.txt", "r")

ファイルに書き込むためにオープンするには、open関数の第2引数に"w"オプションを指定する。

f = open("example.txt", "w")

ファイルをappendモードでオープンする。

f = open("example.txt", "a")

open() do

オープンしたファイルを自動的にクローズするために、open() do という構文が用意されている。

open("example.txt") do f
  for l in eachLine(f)
    println(l)
  end
end

open do に対応する end に達すると、ファイルが自動的にクローズされる。

readlines()

ファイルから行を読み込むには、readlines関数を使う。

try
  f = open("example.txt")
  lines = readlines(f)
  for l in lines
    println(l)
  end
  close(f)
catch
  println("ファイルのオープンに失敗しました。")
end

write()

オープンしたファイルへ1行書き込むには、write関数を使う。

try
  f = open("example.txt", "w")
  write(f, "Hello, world!")
  close(f)
catch
  println("ファイルのオープンに失敗しました。")
end

close()

オープンしたファイルを使い終わったら、ファイルを閉じる必要がある。ファイルをクローズするには、close関数を使う。

try
  f = open("example.txt")
  close(f)
catch
  println("ファイルのオープンに失敗しました。")
end

findfirst()

findfirst() は指定した文字列の位置を返す関数である。

julia> findfirst("uli", "Julia")
2:4

length()

length() は文字列の長さ(文字数)を返す関数である。

julia> length("Julia言語")
7

repeat()

repeat() は文字列を指定した回数分繰り返した文字列を返す関数である。

julia> repeat("Julia", 3)
"JuliaJuliaJulia"

replace()

replace() は指定した文字列で置き換える関数である。

julia> replace("Junior", "nior" => "lia")
"Julia"

cd()

Juliaで作業ディレクトリを変更するには、cd関数を使う。

cd("/Users/tsuka/Documents")

pwd()

Juliaで現在の作業ディレクトリを取得するには、pwd関数を使う。

wd = pwd()

println(wd)

readdir()

Juliaでディレクトリ内のファイルとディレクトリの一覧を取得するには、readdir関数を使う。

try
  dirent = readdir("/Users/tsuka/Documents")
  for i in dirent
    println(i)
  end
catch
  println("ディレクトリの読み込みに失敗しました。")
end

ディレクトリの読み込みに失敗すると、SystemError例外がスローされる。

walkdir()

Juliaでディレクトリ内のファイルとディレクトリの一覧を、その下層ディレクトリも含めて再帰的に取得するには、walkdir関数を使う。

try
  for (root, dirs, files) in walkdir("/Users/tsuka/Documents")
    println("$root 下のディレクトリ")
    for dir in dirs
      println(joinpath(root, dir))
    end
    println("$root 下のファイル")
    for file in files
      println(joinpath(root, file))
    end
  end
catch
  println("ディレクトリの読み込みに失敗しました。")
end

ディレクトリの読み込みに失敗すると、SystemError例外がスローされる。

Base.Libc.strftime

時刻を指定したフォーマットに変換した文字列で返す。指定できるフォーマットは標準Cライブラリと同じ。

フォーマット説明
%d
%H24時間表記の時
%I12時間表記の時
%m
%M
%S
%y西暦の下2桁
%Y4桁の西暦
lastmod = Libc.strftime("%Y-%m-%d", mtime(path))

eulergamma

Base.MathConstants.eulergamma はオイラーの定数を表わす数学定数である。

julia> Base.MathConstants.eulergamma
γ = 0.5772156649015...

golden

Base.MathConstants.golden は黄金比を表わす数学定数である。

jjulia> Base.MathConstants.golden
φ = 1.6180339887498...

pi, π

Base.MathConstants.pi および Base.MathConstants.π は円周率を表わす数学定数である。

julia> π
π = 3.1415926535897...

julia> pi
π = 3.1415926535897...

Base.MathConstants.ℯ は自然対数の底(ネイピア数)を表わす数学定数である。

julia> ℯ
ℯ = 2.7182818284590...

BigFloat()

型変換関数を使ってデータ型を変換することができる。

julia> BigFloat(pi)
3.141592653589793238462643383279502884197169399375105820974944592307816406286198