Julia Base package

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

目次

  1. Constant
    1. Base.ARGS
    2. Base.ENV
    3. Base.PROGRAM_FILE
    4. Base.stderr
    5. Base.stdin
    6. Base.stdout
    7. Base.VERSION
    8. Base.MathConstants.eulergamma
    9. Base.MathConstants.golden
    10. Base.MathConstants.pi
    11. Base.MathConstants.π
    12. Base.MathConstants.ℯ
  2. Type
    1. Base.Dict
    2. Base.Matrix
    3. Base.Set
    4. Base.UnitRange
    5. Base.Vector
  3. Function
    1. Base.bytes2hex
    2. Base.close
    3. Base.deleteat!
    4. Base.eltype
    5. Base.empty!
    6. Base.endswith
    7. Base.error
    8. Base.exit
    9. Base.hex2bytes
    10. Base.insert!
    11. Base.isempty
    12. Base.intersect
    13. Base.join
    14. Base.length
    15. Base.lpad
    16. Base.match
    17. Base.occursin
    18. Base.open
    19. Base.open do
    20. Base.popfirst!
    21. Base.print
    22. Base.println
    23. Base.push!
    24. Base.pushfirst!
    25. Base.rpad
    26. Base.read
    27. Base.readline
    28. Base.readlines
    29. Base.reverse
    30. Base.run
    31. Base.sort
    32. Base.split
    33. Base.startswith
    34. Base.stat
    35. Base.strip
    36. Base.SubString
    37. Base.sum
    38. Base.union
    39. Base.write
  4. Method
    1. Base.collect
    2. Base.findall
    3. Base.findfirst
    4. Base.length
    5. Base.pop!
    6. Base.repeat
    7. Base.replace
    8. Base.FileSystem.cd
    9. Base.FileSystem.mtime
    10. Base.FileSystem.pwd
    11. Base.FileSystem.readdir
    12. Base.FileSystem.walkdir
    13. Base.Libc.malloc
    14. Base.Libc.calloc
    15. Base.Libc.realloc
    16. Base.Libc.free
    17. Base.Libc.errno
    18. Base.Libc.strerror
    19. Base.Libc.trftime
    20. Base.Libc.time
    21. Base.Meta.parse
    22. Base.Meta.ParseError
    23. Base.MPFR.BigFloat
  5. Macro
    1. Base.Enums.@enum

1 Constant

1.1 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

1.2 Base.ENV

Julia の Base.ENV 定数には、OS の環境変数が格納されている。

Julia> typeof(ENV)
Base.EnvDict

Julia> ENV
Base.EnvDict with 19 entries:
  "SHELL"              => "/bin/bash"
  "WSL_DISTRO_NAME"    => "Ubuntu"
  "NAME"               => "E595"
  "PWD"                => "/home/tsuka"
  "LOGNAME"            => "tsuka"
  "MOTD_SHOWN"         => "update-motd"
  "HOME"               => "/home/tsuka"
  "LANG"               => "C.UTF-8"
  "LESSCLOSE"          => "/usr/bin/lesspipe %s %s"
  "TERM"               => "xterm-256color"
  "LESSOPEN"           => "| /usr/bin/lesspipe %s"
  "USER"               => "tsuka"
  "SHLVL"              => "1"
  "WSLENV"             => ""
  "XDG_DATA_DIRS"      => "/usr/local/share:/usr/share:/var/lib/snapd/desktop"
  "PATH"               => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  "HOSTTYPE"           => "x86_64"
  "_"                  => "/usr/bin/julia"
  "OPENBLAS_MAIN_FREE" => "1"

Julia> ENV["SHELL"]
"/bin/bash"

1.3 Base.PROGRAM_FILE

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

println(PROGRAM_FILE)

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

$ julia example.jl
example.jl

1.4 Base.stderr

stderr::IO

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

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

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

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

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

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

1.5 Base.stdin

stdin::IO

標準入力ストリームを参照するグローバル変数

1.6 Base.stdout

stdout::IO

標準出力ストリームを参照するグローバル変数

1.7 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

1.8 Base.MathConstants.eulergamma

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

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

1.9 Base.MathConstants.golden

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

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

1.10 Base.MathConstants.pi

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

julia> pi
π = 3.1415926535897...

1.11 Base.MathConstants.π

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

julia> π
π = 3.1415926535897...

1.12 Base.MathConstants.ℯ

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

julia> ℯ
ℯ = 2.7182818284590...

2 Type

2.4 UnitRange

値の範囲を示す。

UnitRange{T<:Real}

3 Function

3.2 Base.close

close(stream)

バッファをフラッシュして、IO ストリームをクローズする。

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

3.3 Base.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

3.4 Base.eltype

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

julia> eltype((1, 2))
Int64

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

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

3.5 Base.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}()

3.6 Base.endswith

Base.endswith を使って、指定した文字列で終わるかどうかを確認できる。

endswith(s::AbstractString, suffix::AbstractString)
s
文字列
suffix
部分文字列
julia> endswith("Julia", "ia")
true

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

3.7 Base.error

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

error("wrong argument")

3.8 Base.exit

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

exit()

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

exit(1)

3.10 Base.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

3.11 Base.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

3.13 Base.join

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

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

3.14 Base.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

3.17 Base.occursin

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

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

3.18 Base.open

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

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

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

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

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

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

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

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

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

3.19 Base.open do

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

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

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

3.21 Base.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

3.21 Base.print

print([io::IO], xs...)

引数に指定された値をストリームへ出力する。

io
出力先のストリームを指定する。省略した場合は、標準出力ストリーム (Base.stdout) へ出力する。
xs
出力する内容を指定する。

3.22 Base.println

println(xs...)
println(io::IO, xs...)

引数に指定された値と改行をストリームへ出力する。

io
出力先のストリームを指定する。省略した場合は、標準出力ストリーム (Base.stdout) へ出力する。
xs
出力する内容を指定する。

3.23 Base.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

3.24 Base.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

3.30 Base.run

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

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

3.33 Base.startswith

Base.startswith 関数を使って、指定した文字列で始まるかどうかを確認できる。

startswith(s::AbstractString, prefix::AbstractString)
julia> startswith("Julia", "Ju")
true

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

3.34 Base.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

3.35 Base.sum

数値の合計値を返す。

sum(f, itr; [init])
sum(itr; [init])
sum(A::AbstractArray; dims)
sum(f, A::AbstractArray; dims)
f
itr の各要素に対して関数 f を呼び出した結果を合計する。
julia> sum(abs, [1, 2, -3])
6
itr
itr の各要素を合計する。引数 f が指定された場合は、itr の各要素に対して関数 f を呼び出した結果を合計する。
A
Core.AbstractArray の派生型の値を指定する。具体的には、以下に示す型の値である。
Core.AbstractArray
├─ Core.Array
├─ Core.DenseArray
├─ Base.BitArray
└─ Base.SubArray

Base.AbstractMatrix は AbstractArray{T,2} の別名であるため、以下に示す型も該当する。

Base.AbstractMatrix
└─ Base.Matrix

Base.AbstractVector は AbstractArray{T,1} の別名であるため、以下に示す型も該当する。

Base.AbstractVector
└─ Base.Vector
dim
指定した次元の配列の要素を合計する。

Base.sum 関数を使って Core.NamedTuple 各要素の合計値を求めることができる。

julia> sum((x = 1, y = 2, z = 3))
6

Base.sum 関数を使って Core.Tuple 各要素の合計値を求めることができる。

julia> sum((1, 2, 3))
6

Base.sum 関数を使って、Base.Matrix 各要素の合計値を求めることができる。

julia> sum([1 2;3 4])
10

Base.sum 関数を使って Base.Set 各要素の合計値を求めることができる。

julia> sum(Set([1, 2, 3]))
6

Base.sum 関数を使って Base.Vector 各要素の合計値を求めることができる。

julia> sum([1, 2, 3])
6

Base.sum 関数を使って Base.Dict 各要素の合計値を求めることはできない。

julia> d = Dict("x" => 1, "y" => 2, "z" => 3)
Dict{String, Int64} with 3 entries:
  "x" => 1
  "z" => 3
  "y" => 2

julia> sum(d)
ERROR: MethodError: no method matching +(::Pair{String, Int64}, ::Pair{String, Int64})

3.31 Base.sort

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

3.32 Base.split

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

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

3.38 Base.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

3.12 Base.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

3.28 Base.readlines

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

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

3.39 Base.write

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

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

4 Method

4.1 Base.collect

collect(element_type, collection)
collect(collection)
collection
コレクション

値の範囲 (Base.UnitRange) から Base.Vector を生成する。

julia> v = collect(1:3)
3-element Vector{Int64}:
 1
 2
 3

Core.TupleBase.Vector へ変換する。

julia> t = (1, 2, 3)
(1, 2, 3)

julia> v = collect(t)
3-element Vector{Int64}:
1
2
3

4.3 Base.findfirst

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

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

4.4 Base.length

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

julia> length("Julia言語")
7

4.5 Base.pop!

Base.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

4.6 Base.repeat

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

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

4.7 Base.replace

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

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

4.8 Base.FileSystem.cd

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

cd("/Users/tsuka/Documents")

4.10 Base.FileSystem.pwd

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

wd = pwd()

println(wd)

4.11 Base.FileSystem.readdir

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

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

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

3.35 Base.strip

先頭と末尾の空白を削除した部分文字列を返す。

strip([pred=isspace,] str::AbstractString) -> SubString
strip(str::AbstractString, chars) -> SubString

引数

以下に示す引数を strip 関数に指定できる。

str
元の文字列を指定する。
julia> strip("  example  ")
"example"
chars
空白ではなく、指定した文字を削除する。
julia> strip("example", 'e')
"xampl"

4.12 Base.FileSystem.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例外がスローされる。

4.19 Base.Libc.strftime

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

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

4.23 Base.MPFR.BigFloat

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

julia> BigFloat(pi)
3.141592653589793238462643383279502884197169399375105820974944592307816406286198

Macro

Base.Enums.@enum

Julia 言語で列挙子を定義できる。

@enum EnumName[::BaseType] value1[=x] value2[=y]

列挙子を定義する例を次に示す。

julia> @enum Season spring summer autumn winter

それぞれの値を指定することもできる。

julia> @enum Season spring=1 summer=2 autumn=3 winter=4

begin end ブロックを使って、複数行に渡って記述することもできる。

julia> @enum Season begin
  spring
  summer
  autumn
  winter
end
julia> instances(Season)
(spring, summer, autumn, winter)

参考文献

JuliaLang.org contributors 2023. Julia Documentation