Unicodeプログラミングのすゝめ
Julia Advent Calendar 2014 4日目の記事です。
以前、工学部の友人から「変数m
とu
の積をmu
と書いたと思ったら、パラメータμ
をmu
と書いてたりするFortranのコードがあって混乱する」という話を聞きました。
最近の言語はUnicodeを使える物も多いですが(Unicode variable names)、そんなに積極的に使われているわけでもありません。
Juliaは根っからのUnicode好きです。Unicode(UTF8)文字列を最初からサポートしていることはもちろん、 変数名や関数名などに自由にUnicode文字を使えます。
Juliaの対話セッションを立ち上げて、\pi<Tab>
と入力してみましょう。
~/v/julia (master|…) $ julia -q
julia> π
π = 3.1415926535897...
julia>
\pi
がギリシャ文字のπに変化しましたね。
これはJuliaの定数で、pi
もしくはπ
に束縛されています。
他のUnicode文字についても、LaTeXの記法を用いてREPLに入力できます。
\alpha<Tab>
, \beta<Tab>
, \psi<Tab>
などいろいろ試してみましょう。
当然、漢字だって使えます。
julia> 円周率 = π
π = 3.1415926535897...
julia> 円周率
π = 3.1415926535897...
julia> 半径 = 4.0
4.0
julia> 半径^2 * 円周率
50.26548245743669
エディタで入力する
REPLで使えてもあんまり嬉しくないかもしれません。かといってαを入力するのに エディタで「あるふぁ」と打って変換するのも面倒です。 実はVimなら簡単にUnicode文字を使ってプログラミングをできます。 そのためには、julia-vimを導入する必要があります。
julia-vimではJuliaのREPLと同じように\alpha<Tab>
と入力するとα
に変換されるようになっています。
つまり、
a + \alpha
の次にTabキーを押すと
1 + α
と変換されます。 この設定は、Juliaファイルについてはデフォルトで有効です。
EmacsについてもJuliaのcontrib/julia-mode.elにLaTeX => Unicodeの変換表がありますので同様のことが可能だと思います(Emacs使いじゃないので分かりません。ゴメンナサイ)。
実際のコード
この機能を使って、擬似コードをそっくりそのままJuliaのコードに翻訳してみました。
次の擬似コードは (Hoffman, 2014) のコードです。 ここでは何をやっているコードかは気にする必要はありません。
これを見た上で、下のJuliaのコードを見てみましょう。 これは、実際に動くコードです。
function build_tree(L::Function, ∇L::Function, θ::Vector{Float64}, r::Vector{Float64}, u::Float64, v::Int, j::Int, ϵ::Float64) if j == 0 θ′, r′ = leapfrog(∇L, θ, r, v * ϵ) C′ = u ≤ exp(L(θ′) - r′ ⋅ r′ / 2) ? Set([(θ′, r′)]) : Set([]) s′ = int(L(θ′) - r′ ⋅ r′ / 2 > log(u) - Δmax) return θ′, r′, θ′, r′, C′, s′ else θ⁻, r⁻, θ⁺, r⁺, C′, s′ = build_tree(L, ∇L, θ, r, u, v, j - 1, ϵ) if v == -1 θ⁻, r⁻, _, _, C″, s″ = build_tree(L, ∇L, θ⁻, r⁻, u, v, j - 1, ϵ) else _, _, θ⁺, r⁺, C″, s″ = build_tree(L, ∇L, θ⁺, r⁺, u, v, j - 1, ϵ) end s′ = s′ * s″ * ((θ⁺ - θ⁻) ⋅ r⁻ ≥ 0) * ((θ⁺ - θ⁻) ⋅ r⁺ ≥ 0) C′ = C′ ∪ C″ return θ⁻, r⁻, θ⁺, r⁺, C′, s′ end end
変数の対応関係がそっくりそのまま分かるほど似ていませんか?
不等号(≥
)や集合の和(∪
)もJuliaの関数として既に定義されています。
ちなみに、⁺
と″
はそれぞれ\^+<Tab>
と\pprime<Tab>
で入力できます。
コード全体はnuts.jlから入手できます。
おまけ
絵文字も使えます。絵文字を使うにはmasterブランチのJuliaが必要です。
次は@kimrinさんです。