Edited at

[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