Elixir provides excellent interoperability with Erlang libraries. Let us have a look at some of these libraries.
The binary module
The built-in Elixir String module handles binaries that are UTF-8 encoded. The binary module is useful when you are dealing with binary data that is not necessarily UTF-8 encoded. Let us look at an example:# UTF-8 IO.puts(String.to_char_list("Ø")) # binary IO.puts(:binary.bin_to_list "Ø")When running above program, it produces following result:
[216] [195, 152]The above example shows the difference; the String module returns UTF-8 codepoints, while :binary deals with raw data bytes.
The crypto module
The crypto module contains hashing functions, digital signatures, encryption and more. The :crypto module is not part of the Erlang standard library, but is included with the Erlang distribution. This means you must list :crypto in your project’s applications list whenever you use it. Let use see an example using the crypto module:IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))When running above program, it produces following result:
3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB
The digraph module
The digraph module contains functions for dealing with directed graphs built of vertices and edges. After constructing the graph, the algorithms in there will help finding for instance the shortest path between two vertices, or loops in the graph. Note that the functions in :digraph alter the graph structure indirectly as a side effect, while returning the added vertices or edges.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}") endWhen running above program, it produces following result:
0.0, 0.0 1.0, 0.0 1.0, 1.0
The math module
The math module contains common mathematical operations covering trigonometry, exponential and logarithmic functions. Let us look at some examples:# Value of pi IO.puts(:math.pi()) # Logarithm IO.puts(:math.log(7.694785265142018e23)) # Exponentiation IO.puts(:math.exp(55.0)) #...When running above program, it produces following result:
3.141592653589793 55.0 7.694785265142018e23
The queue module
The queue is a data structure that implements (double-ended) FIFO (first-in first-out) queues efficiently. Let us look at an example: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)When running above program, it produces following result:
A B
No comments:
Post a Comment