diff options
author | lrosa007 <lrosa008@gmail.com> | 2020-11-04 15:50:27 -0500 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-11-04 21:03:21 +0000 |
commit | be647cae5e1bbda65d933fd5728e21a0fa7a4285 (patch) | |
tree | b2f28fbd9cdea6adee4aaf39536be8dfb16b936d | |
parent | 0b32376508b229cdd2a23745d6fe2fbb436162aa (diff) | |
download | gleam_stdlib-be647cae5e1bbda65d933fd5728e21a0fa7a4285.tar.gz gleam_stdlib-be647cae5e1bbda65d933fd5728e21a0fa7a4285.zip |
feat(int): add sum function
-rw-r--r-- | src/gleam/int.gleam | 19 | ||||
-rw-r--r-- | test/gleam/int_test.gleam | 8 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/gleam/int.gleam b/src/gleam/int.gleam index f717eaa..0bbd63d 100644 --- a/src/gleam/int.gleam +++ b/src/gleam/int.gleam @@ -148,3 +148,22 @@ pub fn is_odd(x: Int) -> Bool { pub fn negate(x: Int) -> Int { -1 * x } + +/// Sums a list of Ints. +/// +/// ## Example +/// +/// > sum([1, 2, 3]) +/// 6 +/// +pub fn sum(numbers: List(Int)) -> Int { + numbers + |> do_sum(0) +} + +fn do_sum(numbers: List(Int), initial: Int) -> Int { + case numbers { + [] -> initial + [x, ..rest] -> do_sum(rest, x + initial) + } +} diff --git a/test/gleam/int_test.gleam b/test/gleam/int_test.gleam index 97fbb84..cd7b2b9 100644 --- a/test/gleam/int_test.gleam +++ b/test/gleam/int_test.gleam @@ -182,3 +182,11 @@ pub fn negate_test() { int.negate(0) |> should.equal(0) } + +pub fn sum_test() { + int.sum([]) + |> should.equal(0) + + int.sum([1, 2, 3]) + |> should.equal(6) +} |