Powered by AppSignal & Oban Pro

List Intuition

3_list_intuition.livemd

List Intuition

import IEx.Helpers

List Operators

  • append item to a list
  • got the first element of a list (head or hd)
  • get the rest of a list, discarding the first (tail or tl)

Build list with tuples

Use our list in a program

defmodule Tlist do
  # Our list should look like {3, 2, 1, 137}

  def empty, do: {}

  def add(tlist, item) do
    {item, tlist}
  end

  def head({first, _rest}) do
    first
  end

  def tail({_first, rest}) do
    rest
  end
end
{:module, Tlist, <<70, 79, 82, 49, 0, 0, 7, ...>>, {:tail, 1}}

Try it out!

tlist = {3, {2, {1, {}}}}
{3, {2, {1, {}}}}
import Tlist
Tlist
tlist |> head
3
tlist |> tail |> head
2
tlist |> tail |> tail |> head
1

Within a program

counts and sum with recursion

defmodule TlistFunctions do
  def count({}) do
    0
  end

  def count({_item, items}) do
    1 + count(items)
  end

  def sum({}) do
    0
  end

  def sum({number, numbers}) do
    number + sum(numbers)
  end
end
{:module, TlistFunctions, <<70, 79, 82, 49, 0, 0, 6, ...>>, {:sum, 1}}
import Tlist

tlist = empty() |> add(1) |> add(2) |> add(3)
# TlistFunctions.count(tlist)
%{
  sum: TlistFunctions.sum(tlist),
  count: TlistFunctions.count(tlist)
}
%{count: 3, sum: 6}