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 ในขณะที่: ข้อตกลงไบนารีกับไบต์ข้อมูลดิบ

โมดูล Crypto

โมดูลการเข้ารหัสลับประกอบด้วยฟังก์ชันการแฮชลายเซ็นดิจิทัลการเข้ารหัสและอื่น ๆ โมดูลนี้ไม่ได้เป็นส่วนหนึ่งของไลบรารีมาตรฐาน Erlang แต่รวมอยู่ในการแจกแจง Erlang ซึ่งหมายความว่าคุณต้องแสดงรายการ: 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

โมดูลคณิตศาสตร์

โมดูลคณิตศาสตร์ประกอบด้วยการดำเนินการทางคณิตศาสตร์ทั่วไปซึ่งครอบคลุมฟังก์ชันตรีโกณมิติเอกซ์โปเนนเชียลและลอการิทึม ให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจว่าโมดูลคณิตศาสตร์ทำงานอย่างไร -

# 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