や、言語関係など覚えたいもの、覚えるべきものはたくさんある一方で、注目が集まっているから、やってみたい。ということでプログラミング言語としてのを学んでいく。
0. はじめに
スクリプト言語は型を明示せずに簡潔に記述できる一方で動作速度に不安が残る。コンパイル型の言語は型にうるさく冗長な表現が必要になり得る一方で実行速度が速い。このようなジレンマを解消し得るのがである。文法の簡潔さと高速な実行速度を両立できる。
1. Julia入門
はの教授らのグループが開発した汎用プログラミング言語である。
2. Juliaの言語機能
他の言語のように各種計算ができるが、特徴的なのは、
x = 1 y = 2.0 println(x) println(y) println(2x + 1) # *が無くても乗算扱いされる # \ + ギリシア文字の英語名に対してTabを押すとそのギリシア文字を変数として利用できる θ = π/4 # このπは円周率の予約文字 println(θ) sin(θ) + cos(θ)
または型を明記する必要が無いが、型が無いわけではない。プリミティブ型として以下が用意されている。
8ビット符号付整数型 | 8ビット符号なし整数型 | 16ビット符号付整数型 | ||||
16ビット符号なし整数型 | 32ビット符号付整数型 | 8ビット符号なし整数型 | ||||
64ビット符号付整数型 | 64ビット符号なし整数型 | 128ビット符号付整数型 | ||||
128ビット符号なし整数型 | ブール型 | 16ビット浮動小数点数型 | ||||
32ビット浮動小数点数型 | 64ビット浮動小数点数型 |
println(typeof(1)) println(typeof(1.0)) 0x01 # 符号なし整数型 2.5f-4 # 定数 const x = 1.0 x = 1
2.1 演算子
2.1.1 基本的な演算子
概要 |
概要 |
|||
---|---|---|---|---|
プラス | & | ビット | ||
マイナス | | | ビット | ||
加算 | ⊻ | ビット*2 | ||
減算 | 右論理シフト | |||
乗算 | 右算術シフト | |||
除算 | 左論理/算術シフト | |||
商 | 等価演算子 | |||
\ | 不等価演算子 | |||
^ | 冪乗 | 不等号 | ||
% | 剰余 | 不等号(等号付き) | ||
否定 | 不等号 | |||
ビット | 不等号(等号付き) |
x = 2 y = 3 a = true b = false # println(+x) println(-x) println(x+y) println(x-y) println(x*y) println(x/y) println(y÷x) println(y\x) println(x^y) println(x%y) println(!a) println(~a) println(a&b) println(a|b) println(a⊻b) println(a>>>b) println(a>>b) println(a<<b) println(x==y) println(x!=y) println(x ≠ y) println(x < y) println(x > y) # println(x) println(x+=1) println(x-=1) println(x)
2.2 文字列
文字列を表すのに型、文字を表すのに型を用いる。文字列はダブルクオーテーション("")、文字は('')を用いる。
println("abc"*"def") # ""はString型 println('a' * 'b') # ''はChar型 # 以下はエラー println('abc') # 文字列はインデックスを与えることでインデックス番目の文字を返す "abc"[1] # Juliaは1からインデックスがはじまる "abc"[end] # endは文字列の最後を指す特殊なインデックス
2.2.1 文字列の処理
a = "Hello" b = "Julia" # 文字列の結合 println(string(a," ",b)) println(a*" "*b) println("$a $b") # 文字列の補間 "a + b = $a $b"
2.2.2 Unicode文字列
##################### ### Unicode文字列 ### ##################### s = "こんにちは Julia" println(s[1]) println(s[4]) # 「こ」は3byteなので4つ目は「ん」 println(s[2]) # エラー # nextind(s,1) # 次の文字の文字インデックスを取る
より簡単には文字列を文字(型)の配列に格納すればよい。
chars = Vector{Char}(s)
2.2.3 文字列の関数
#################### ### 文字列の関数 ### #################### # 文字列の長さを返す println(length("Julia")) # 文字列の繰り返し println(repeat("Julia",2)) # 文字列の置換 println(replace("Python is the best!", "Python" => "Julia")) # 文字列の分割 println(split("Julia Lang", " ")) # 文字列の先頭が特定の文字列か否か println(startswith("Julia Lang","Julia")) # 文字列の末尾が特定の文字列か否か println(endswith("Julia Lang","Julia")) # 区切り文字を用いた文字列の連結 println(join(["Julia","Lang"]," ")) # 文字列の検索 println(findfirst("Julia","JuliaLang"))
2.2.4 正規表現
################ ### 正規表現 ### ################ # 文字列の前にrを付けると正規表現であることを表す regex = r"J.*g" println(typeof(regex)) # 正規表現を用いた文字列のパターンマッチング m = match(regex, "JuliaLang is the best.") println(m) println(typeof(m)) m.match