UTF-8
線形代数
Julia
文法

[Julia] UTF-8 表記の演算子たち

More than 1 year has passed since last update.

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 フォントで表示したスクリーンショットです。まるで、地の文ですよね。

スクリーンショット 2017-02-01 23.15.41.png