1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Julia独習メモ <1>

Last updated at Posted at 2023-05-28

Juliaに入門した。そのときのメモをここに書く。n日目表記は、実際の日数とゆるく対応している。
あまり、誰かの役に立つのかは分からないが、メモ書きとして公開する。

1日目 環境構築

juliaup をインストールすることで、Julia自体もインストールできた。
VSCodeのJulia拡張をインストールした。初回はLSPの立ち上げに時間がかかった。

2日目 マニュアルを読み始める

私は、比較的多くのプログラミング言語を既に知っている人間なので、マニュアルをてっぺんから読んでいくスタイルで学ぶ。
この方法は、あまり慣れていない者にはおすすめしない。

Getting Started

インタラクティブセッション(REPL)の立ち上げと説明。REPLにおいては、変数ansが、直前の評価結果を保持する。
include("file.jl")でファイルを読み込んで評価できる。(REPL内でこれを行うと、外部ファイルのansを読み込めた)

REPLを立ち上げずにファイルを動作させるときは julia script.jl のようにやる。

REPLで ? をタイプするとヘルプモードになって、調べたいことが調べられる、という便利情報。

Variables

変数は宣言とかは特に行わない。x = 10のようにすることで、変数が値に束縛される。
Unicodeの変数名にも対応している。

💪 = "POWER"

REPLでは、LaTeX記法のように、\delta-tabのように打つと、$\delta$になる、などの機能がある。
人からもらったコードで読み方が分からないものは、REPLのヘルプモード(?)で調べられる。

help?> 💪
"力💪" can be typed by \:muscle:<tab>

help?> α̂⁽²⁾
"α̂⁽²⁾" can be typed by \alpha<tab>\hat<tab>\^(2)<tab>

pisqrtのようなbuilt-inの定数や関数は、使われる前であれば書き換えることができる(非推奨)が、一度使われてから書き換えるとエラーが発生する。

使うことができる変数名については、とてもめんどくさいことが書かれているので、気になったとき再度参照する。
先頭1文字はアルファベットかアンダースコアか、とても雑に言うと非ASCIIなUnicode文字。以降は、それに加えて、数字や!が使える。

演算子を定義することもできて、例えば +ᵃ を定義した場合、 +ᵃx+ᵃ x なのか + ᵃx なのか区別できるよう前者で書かなければならない。

アンダースコアのみからなる変数(_, __, ___, ...)は扱いが特殊で、代入後、即時に破棄されるので、参照することはできない。

キーワードは変数名にできない。

UnicodeはJulia上では、NFC正規化 + 一部独自の正規化によって扱われる。

a[1] = 42のようなものは、実は代入じゃないことが書かれている(Pythonとかもそうだよね)

Stylistic Conventions

以下が推奨される。

  • 変数名は小文字
  • 単語の区切りは_で示してもよいが、区切らないと読みづらい場合を除いては推奨されない
  • 型とモジュールの名前は大文字で始まり、単語の区切りはCamelCaseにより表す
  • 引数に書き込みを行う関数("mutating"あるいは"in-place"な関数)の名前の末尾には!をつける

Integers and Floating-Point Numbers

型の名前が UInt32 などの名称で定義されている。

整数

型名が指定されていない場合の整数リテラルは、32ビットシステムではInt32, 64ビットシステムではInt64になる。ただし、32ビットで表せない整数リテラルはInt64になる。
64ビットで表せない整数リテラルはInt128、それでも表せない整数リテラルはBigIntになることを確認した。

整数型の最小値・最大値は、typemin, typemaxで取れる。

julia> typemin(Int64), typemax(Int64)
(-9223372036854775808, 9223372036854775807)

あまり驚くべきことではないが、以下のような挙動を示す。

julia> 9223372036854775808 + 9223372036854775807
18446744073709551615

julia> typeof(ans)
Int128

julia> 9223372036854775807 + 9223372036854775807
-2

julia> typeof(ans)
Int64

任意精度の整数型であるBigIntbig(1)big"1"のように作ることができる。
他の整数型はInt16(1)のように作ることができる。

整数の除算は div(3, 2) または 3 ÷ 2 のように行う(3 / 2では浮動小数点型を返す。÷\div-tabで入力する)。
ゼロで割ったときおよび、整数型の最小値(typeminで得られる値)を-1で割ったときは、DivideErrorが投げられる。
余りは rem または % で求める。

浮動小数点数

リテラルは通常はFloat64として扱われる。
Float32(1.5)のようにするか、または、 1e10 のような表記のefにすることでFloat32が得られる。

半精度浮動小数点数もサポートしている。 Float16(1.5)

Float64では、16進リテラル記述も行うことができる。(0xはじまりで、epにする)

julia> 0x1p0
1.0

# 16進小数点第1位は、(1/16)の重みを持つ。
julia> 0x0.1p0
0.0625

julia> 0x0.2p0
0.125

julia> 0x0.4p0
0.25

julia> 0x0.8p0
0.5

julia> 0x0.cp0
0.75

julia> 0x0.fp0
0.9375


# 16進小数点第2位は、(1/16^2)の重みを持つ。
julia> 0x0.01p0
0.00390625

julia> 1.0 / 16^2
0.00390625

# 16進小数点の指数表記(p以降)の重みは2
julia> 0x1p0
1.0

julia> 0x1p1
2.0

julia> 0x1p2
4.0

julia> 0x1p-1
0.5

julia> 0x1p10
1024.0

_ は整数リテラルまたは浮動小数点数リテラルで、セパレータとして使用できる(読みやすくするために使用でき、無視される)

bitstring関数で、バイナリ表記を見ることができる。

julia> bitstring(0.5)
"0011111111100000000000000000000000000000000000000000000000000000"

Inf, -Inf, NaNFloat64に、Inf32, -Inf32, NaN32Float32に、同様のものがFloat16に定義されている。

typemin, typemaxは、以下の値を返す。

julia> (typemin(Float16),typemax(Float16))
(-Inf16, Inf16)

julia> (typemin(Float32),typemax(Float32))
(-Inf32, Inf32)

julia> (typemin(Float64),typemax(Float64))
(-Inf, Inf)

マシンイプシロンはepsで得られる。 eps()eps(Float64)と同じ。
epsの引数は値を指定することもでき、eps(x)で、x < x + eps(x)となるような値が得られる。

nextfloat, prevfloatによって、次/前の値を得ることができる。

定数係数

以下のような記法が可能

julia> x = 3
3

julia> 2x^2 - 3x + 1
10

julia> 1.5x^2 - .5x + 1
13.0

julia> 2^2x
64

julia> 2(x-1)^2 - 3(x-1) + 1
3

julia> 2π
6.283185307179586

以下のようには書けない。

julia> (x-1)(x+1)
ERROR: MethodError: objects of type Int64 are not callable

julia> x(x+1)
ERROR: MethodError: objects of type Int64 are not callable

0xffは、0 * xffとは解釈されない。(0x, 0o, 0bから始まる場合は、常に、16進, 8進, 2進リテラルとして扱われる)
1e10 も同様に、 1 * e10とは解釈されない。Efも同様。
しかし、Fはそのような特別扱いがされない。(1F101 * F10)

0と1

zero(Float32)zero(1.0)のようにしてゼロを作ることができる。同様にoneを使って1を作ることができる。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?