Julia ミニパターン。Julia 独特の構文を、不定期に紹介したいと思います。
2回目は、半角英字 ではない 演算子について。
識別子 (変数や関数の名前) に漢字を使える言語はいくつかあります。Julia は、識別子に UTF-8 を使えます。さらに、UTF-8で表記する 2項演算子(中置き演算子)が、いくつかあります。大胆ですね。
Unicode の TAB入力補完
Julia の REPL(コマンドライン) を使うときには、TABキーによる入力補完の機能を使って、Unicode 文字を楽に入力できます。 特定の文字列を打ち込んでから直後に TAB を入力すると、該当の文字に置き換わります。例えば、\alpha[TAB] と打ち込むと α に変換されます。
TAB補完文字列の一覧は、こちらにあります。LaTeX 利用者には馴染みの文字列が多いですね →
http://docs.julialang.org/en/stable/manual/unicode-input/
比較演算子など
下の表。左列は UTF-8 を含む表記、右列は同じ働きをする 半角英字の表記です。最右列は TAB補完文字列です。
UTF な表記 | non-UTF な表記 | TAB補完文字列 |
---|---|---|
a ≤ b | a <= b |
\le |
a ≥ b | a >= b |
\ge |
a ≠ b | a != b |
\ne |
a ≡ b |
a === b , is(a, b)
|
\equiv |
a ≢ b |
a !== b , !is(a, b)
|
\nequiv |
a ≈ b |
isapprox(a,b) | \approx |
- 「大きい、または、等しい」は、高校までは、不等号の下に等号を表記「 ≧ 」( U+2267 ) しますが、大学に入ると、等号を横棒一本で表記「 ≥ 」( U+2265 ) します。Julia は、前者の表記をとらないので、大人の言葉だというわけです (末尾は余談)。
-
a == b
は値が等しい。a ≡ b
はオブジェクトが等価。 -
isapprox(a,b)
は近似比較の演算子です。
数や集合の演算
UTF な表記 | non-UTF な表記 | TAB補完文字列 |
---|---|---|
a \ b |
b / a |
|
a ÷ b |
div(a,b) | \div |
∪(a, b...) |
union(a,b...) | \cup |
a ∩ b |
intersect(a,b...) | \cap |
-
a \ b
は左除算 (left division) というそうです。
要素がコレクションに属するかの判定
UTF な表記 | non-UTF な表記 | TAB補完文字列 |
---|---|---|
item ∈ collection |
in(item, collection) |
\in |
collection ∋ item |
in(item, collection) |
\ni |
item ∉ collection |
! in(item, collection) |
\notin |
collection ∌ item | ! in(item, collection) |
\nni |
全て in(item, collection)
の別の表記です。
線形代数の演算子たち
行列、ベクトルに対する演算です。
UTF な表記 | non-UTF な表記 | TAB補完文字列 |
---|---|---|
a ⋅ b, ⋅(a, b) | dot(x, y) |
\cdot |
a × b , ×(a, b)
|
cross(a, b) |
\times |
A \ B , \(A, B)
|
- a ⋅ b は、ベクトルの内積 (inner product)です。ベクトル a が複素数なら、複素共役がとられます。ですから、a ⋅ a は実数の値となります
-
a × b
は、3次元ベクトル同士の外積 (クロス積)です。 -
A \ B
は、行列の商といいます。$A$ が正方行列なら左から逆行列を乗ずること $A^{-1}B$ に相当します。正方行列ではない場合は、最小二乗ノルム解を計算します。これを使うと、任意の基底を用いて、ベクトルを表すことができます。こちらに詳しく書きました → [Julia] 特定の基底におけるベクトルの表示を求める + 基底変換
例: 逆格子ベクトル
私の専門分野では、三つのベクトル $a_1, a_2, a_3$ に対して、$b_1 = 2\pi \frac{a_2 \times a_3}{a_1\cdot(a_2 \times a_3)} $ などを計算しますが、上の表記を使うと、式通りに書けます。すごく便利。(以下、係数 $2\pi$は省略)。
julia> a1 = [1,1,-1] /2.0
3-element Array{Float64,1}:
0.5
0.5
-0.5
julia> a2 = [1,-1,1] /2.0
3-element Array{Float64,1}:
0.5
-0.5
0.5
julia> a3 = [-1,1,1] /2.0
3-element Array{Float64,1}:
-0.5
0.5
0.5
julia> b1 = (a2 × a3) / ( a1 ⋅ (a2 × a3))
3-element Array{Float64,1}:
1.0
1.0
-0.0
julia> b2 = (a3 × a1) / ( a2 ⋅ (a3 × a1))
3-element Array{Float64,1}:
1.0
-0.0
1.0
julia> b3 = (a1 × a2) / ( a3 ⋅ (a1 × a2))
3-element Array{Float64,1}:
-0.0
1.0
1.0
Unicode プログラミング
@bicycle1885 さんの、こちらの記事もどうぞ。
- Unicodeプログラミングのすゝめ http://bicycle1885.hatenablog.com/entry/2014/12/05/011256
上の記事の末尾で紹介されているプログラムを、下に示します。Atom Editor 上で、Fira Code フォントで表示したスクリーンショットです。まるで、地の文ですよね。