Elixir-도서관
Elixir는 Erlang 라이브러리와의 뛰어난 상호 운용성을 제공합니다. 몇 가지 라이브러리에 대해 간략히 설명하겠습니다.
바이너리 모듈
내장 된 Elixir String 모듈은 UTF-8로 인코딩 된 바이너리를 처리합니다. 바이너리 모듈은 반드시 UTF-8로 인코딩되지 않은 바이너리 데이터를 다룰 때 유용합니다. Binary 모듈을 더 이해하기위한 예제를 고려해 보겠습니다.
# 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를 나열해야합니다. crypto 모듈을 사용한 예를 살펴 보겠습니다.
IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))
위의 프로그램이 실행되면 다음과 같은 결과가 생성됩니다.
3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB
Digraph 모듈
digraph 모듈에는 꼭지점과 가장자리로 구성된 유 방향 그래프를 처리하는 함수가 포함되어 있습니다. 그래프를 구성한 후 여기에있는 알고리즘은 예를 들어 두 정점 사이의 최단 경로 또는 그래프의 루프를 찾는 데 도움이됩니다. 기능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