LoginSignup
20
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-30

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

20
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
9