Elixir-এ লিস্টগুলো মানের একটি সংগ্রহ ধরে রাখার একটি মৌলিক ডেটা টাইপ। লিস্ট ইমিউটেবল, অর্থাৎ এগুলো পরিবর্তন করা যায় না। যে কোনো অপারেশন যা একটি লিস্ট পরিবর্তন করে, সেটি একটি নতুন লিস্ট রিটার্ন করে। লিস্টগুলো Enumerable প্রোটোকল ইমপ্লিমেন্ট করে, যার ফলে Enum ও Stream মডিউলের ফাংশনগুলো ব্যবহার করা যায়।
Elixir-এ লিস্টগুলো লিঙ্কড লিস্ট হিসেবে ইমপ্লিমেন্ট করা হয়, একটানা মেমরি লোকেশনের অ্যারে হিসেবে নয়। তাই একটি লিস্টের কোনো এলিমেন্ট অ্যাক্সেস করতে লিস্টের দৈর্ঘ্যের ওপর নির্ভর করে লিনিয়ার টাইম লাগে।
লিস্ট লেখা যায় লিটারেল ফর্মে, হেড-টেইল নোটেশনে (যেখানে cons অপারেটর | ব্যবহার করা হয়), অথবা দুটোর মিশ্রণে:
# Literal Form
[]
[1]
[1, 2, 3]
# Head-tail Notation
[]
# same as [1]
[1 | []]
# same as [1, 2, 3]
[1 | [2 | [3 | []]]]
# Mixed
# same as [1, 2, 3]
[1 | [2, 3]]
cons (|) অপারেটরের আগে একাধিক এলিমেন্টও থাকতে পারে।
# Multiple prepends
[1, 2, 3 | [4, 5]]
লিস্টে আইটেম অ্যাপেন্ড করতে হেড-টেইল নোটেশন ব্যবহার করা যায়।
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
ইটারেশনের সময় একটি লিস্টে এলিমেন্ট অ্যাপেন্ড করা একটি অ্যান্টি-প্যাটার্ন হিসেবে ধরা হয়। একটি এলিমেন্ট অ্যাপেন্ড করতে পুরো লিস্টের মধ্য দিয়ে যেতে হয় এবং শেষে এলিমেন্টটি যোগ করতে হয়, তাই প্রতিটি ইটারেশনে নতুন এলিমেন্ট অ্যাপেন্ড করতে হলে প্রতিটি ইটারেশনে পুরো লিস্টের মধ্য দিয়ে যেতে হবে।
রিভার্স করা লিস্টের শুরুতে একটি এলিমেন্ট প্রিপেন্ড করে, তারপর ফলাফলটি রিভার্স করে আমরা একই ফলাফল পেতে পারি। প্রিপেন্ড করা একটি দ্রুত অপারেশন এবং এতে কনস্ট্যান্ট টাইম লাগে।
# Appending to the end of a list (potentially slow)
[1, 2, 3] ++ [4] ++ [5] ++ [6]
# Prepend to the start of a list (faster, due to the nature of linked lists)
[6 | [5 | [4 | [3, 2, 1]]]]
# then reverse!
লিস্টের জন্য Kernel-এর বেশ কিছু কমন ফাংশন আছে:
hd/1 একটি লিস্টের হেড রিটার্ন করে, অর্থাৎ লিস্টের প্রথম আইটেম।tl/1 লিস্টের টেইল রিটার্ন করে, অর্থাৎ লিস্ট থেকে প্রথম আইটেমটি বাদ দিলে যা থাকে।length/1 লিস্টে থাকা আইটেমের সংখ্যা রিটার্ন করে।in/2 একটি বুলিয়ান মান রিটার্ন করে, যা নির্দেশ করে আইটেমটি লিস্টের একটি এলিমেন্ট কি না।এছাড়াও List মডিউল রয়েছে।
লিস্টে যেকোনো ডেটা টাইপ এবং বিভিন্ন ডেটা টাইপের মিশ্রণ থাকতে পারে।
list = [1, :a, 2.0, "string"]