Elixir-libraries

提供:Dev Guides
移動先:案内検索

Elixir-ライブラリ

Elixirは、Erlangライブラリとの優れた相互運用性を提供します。 いくつかのライブラリについて簡単に説明します。

バイナリモジュール

組み込みのElixir Stringモジュールは、UTF-8でエンコードされたバイナリを処理します。 バイナリモジュールは、UTF-8でエンコードされているとは限らないバイナリデータを処理する場合に役立ちます。 バイナリモジュールをさらに理解するための例を考えてみましょう-

# UTF-8
IO.puts(String.to_char_list("Ø"))

# binary
IO.puts(:binary.bin_to_list "Ø")

上記のプログラムが実行されると、次の結果が生成されます-

[216]
[195, 152]

上記の例は違いを示しています。 StringモジュールはUTF-8コードポイントを返し、:binaryは生データバイトを処理します。

暗号モジュール

暗号化モジュールには、ハッシュ関数、デジタル署名、暗号化などが含まれています。 このモジュールはErlang標準ライブラリの一部ではありませんが、Erlangディストリビューションに含まれています。 つまり、使用するときは常にプロジェクトのアプリケーションリストに:cryptoをリストする必要があります。 暗号モジュールを使用した例を見てみましょう-

IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))

上記のプログラムが実行されると、次の結果が生成されます-

3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB

Digraphモジュール

digraphモジュールには、頂点とエッジで構築された有向グラフを処理するための関数が含まれています。 グラフを作成した後、そこにあるアルゴリズムは、たとえば、2つの頂点間の最短経路、またはグラフ内のループを見つけるのに役立ちます。 関数 in:digraph は、追加された頂点またはエッジを返す一方で、副作用として間接的にグラフ構造を変更することに注意してください。

digraph = :digraph.new()
coords = [{0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}]
[v0, v1, v2] = (for c <- coords, do: :digraph.add_vertex(digraph, c))
:digraph.add_edge(digraph, v0, v1)
:digraph.add_edge(digraph, v1, v2)
for point <- :digraph.get_short_path(digraph, v0, v2) do
   {x, y} = point
   IO.puts("#{x}, #{y}")
end

上記のプログラムが実行されると、次の結果が生成されます-

0.0, 0.0
1.0, 0.0
1.0, 1.0

数学モジュール

数学モジュールには、三角法、指数関数、対数関数をカバーする一般的な数学演算が含まれています。 Mathモジュールの動作を理解するために、次の例を考えてみましょう-

# Value of pi
IO.puts(:math.pi())

# Logarithm
IO.puts(:math.log(7.694785265142018e23))

# Exponentiation
IO.puts(:math.exp(55.0))

#...

上記のプログラムが実行されると、次の結果が生成されます-

3.141592653589793
55.0
7.694785265142018e23

キューモジュール

キューは、(ダブルエンド)FIFO(先入れ先出し)キューを効率的に実装するデータ構造です。 次の例は、キューモジュールの仕組みを示しています-

q = :queue.new
q = :queue.in("A", q)
q = :queue.in("B", q)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)

上記のプログラムが実行されると、次の結果が生成されます-

A
B