diff options
author | Louis Pilfold <louis@lpil.uk> | 2023-12-12 13:04:55 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-12-12 13:04:55 +0000 |
commit | 819cc743eba34cdd25e25f3c6ba5891a8cb6077d (patch) | |
tree | dd6454f3ec7ed3c878da0450475a209d2864e0f6 /lessons/src | |
parent | e660bc6a4eb2b7537e33617df9b411ef07a894d7 (diff) | |
download | tour-819cc743eba34cdd25e25f3c6ba5891a8cb6077d.tar.gz tour-819cc743eba34cdd25e25f3c6ba5891a8cb6077d.zip |
List functions
Diffstat (limited to 'lessons/src')
-rw-r--r-- | lessons/src/lesson020_lists/code.gleam | 16 | ||||
-rw-r--r-- | lessons/src/lesson020_lists/text.html | 19 | ||||
-rw-r--r-- | lessons/src/lesson021_list_functions/code.gleam | 15 | ||||
-rw-r--r-- | lessons/src/lesson021_list_functions/text.html | 25 |
4 files changed, 75 insertions, 0 deletions
diff --git a/lessons/src/lesson020_lists/code.gleam b/lessons/src/lesson020_lists/code.gleam new file mode 100644 index 0000000..646ad6e --- /dev/null +++ b/lessons/src/lesson020_lists/code.gleam @@ -0,0 +1,16 @@ +import gleam/io + +pub fn main() { + let ints = [1, 2, 3] + + io.debug(ints) + + // Immutably prepend + io.debug([-1, 0, ..ints]) + + // Uncomment this to see the error + // io.debug(["zero", ..ints]) + + // The original lists are unchanged + io.debug(ints) +} diff --git a/lessons/src/lesson020_lists/text.html b/lessons/src/lesson020_lists/text.html new file mode 100644 index 0000000..dd07cd7 --- /dev/null +++ b/lessons/src/lesson020_lists/text.html @@ -0,0 +1,19 @@ +<p> + Lists are ordered collections of values. +</p> +<p> + <code>List</code> is a generic type, having a type parameter + for the type of values it contains. A list of ints has the type + <code>List(Int)</code>, and a list of strings has the type + <code>List(String)</code>. +</p> +<p> + Lists are immutable single-linked lists, meaning they are very efficient to + add and remove elements from the front of the list. +</p> +<p> + Counting the length of a list or getting elements from other positions in the + list is expensive and rarely done. It is rare to write algorithms that index + into sequences in Gleam, but but when they are written a list is not the right + choice of data structure. +</p> diff --git a/lessons/src/lesson021_list_functions/code.gleam b/lessons/src/lesson021_list_functions/code.gleam new file mode 100644 index 0000000..8cd4ced --- /dev/null +++ b/lessons/src/lesson021_list_functions/code.gleam @@ -0,0 +1,15 @@ +import gleam/io +import gleam/list + +pub fn main() { + let ints = [0, 1, 2, 3, 4, 5] + + let doubled = list.map(ints, fn(x) { x * 2 }) + io.debug(doubled) + + let even = list.filter(ints, fn(x) { x % 2 == 0 }) + io.debug(even) + + let total = list.fold(ints, from: 0, with: fn(count, e) { count + e }) + io.debug(total) +} diff --git a/lessons/src/lesson021_list_functions/text.html b/lessons/src/lesson021_list_functions/text.html new file mode 100644 index 0000000..e143654 --- /dev/null +++ b/lessons/src/lesson021_list_functions/text.html @@ -0,0 +1,25 @@ +<p> + The <a href="https://hexdocs.pm/gleam_stdlib/gleam/list.html"><code>gleam/list</code></a> + standard library module contains functions for working with lists. A Gleam + program will likely make heavy use of this module. +</p> + +<p> + <a href="https://hexdocs.pm/gleam_stdlib/gleam/list.html#map"><code>map</code></a> + makes a new list by running a function on each element in a list. +</p> +<p> + <a href="https://hexdocs.pm/gleam_stdlib/gleam/list.html#filter"><code>filter</code></a> + makes a new list containing only the elements for which a function returns + true. +</p> +<p> + <a href="https://hexdocs.pm/gleam_stdlib/gleam/list.html#fold"><code>fold</code></a> + combines all the elements in a list into a single value by running a function + left-to-right on each element, passing the result of the previous call to the + next call. +</p> +<p> + It's worth getting familiar with all the functions in this module when writing + Gleam code. +</p> |