diff options
author | Connor Schembor <connor.schembor@rutgers.edu> | 2020-11-05 21:28:32 -0500 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-11-06 08:41:52 +0000 |
commit | c1d3cc12b920f60d06265b645daa3ff0010a8402 (patch) | |
tree | b2b3abaf035bdb14e050d8b227a894dbd6567b0b /src | |
parent | 46e4a4abb591be88a633da330a344b8a96b3772a (diff) | |
download | gleam_stdlib-c1d3cc12b920f60d06265b645daa3ff0010a8402.tar.gz gleam_stdlib-c1d3cc12b920f60d06265b645daa3ff0010a8402.zip |
Add product function to int and float modules
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam/float.gleam | 21 | ||||
-rw-r--r-- | src/gleam/int.gleam | 21 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/gleam/float.gleam b/src/gleam/float.gleam index 3d611b5..8018c95 100644 --- a/src/gleam/float.gleam +++ b/src/gleam/float.gleam @@ -190,3 +190,24 @@ fn do_sum(numbers: List(Float), initial: Float) -> Float { [x, ..rest] -> do_sum(rest, x +. initial) } } + +/// Multiplies a list of Floats and returns the product. +/// +/// ## Example +/// +/// > product([2.5, 3.2, 4.2]) +/// 33.6 +/// +pub fn product(numbers: List(Float)) -> Float { + case numbers { + [] -> 0. + _ -> do_product(numbers, 1.) + } +} + +fn do_product(numbers: List(Float), initial: Float) -> Float { + case numbers { + [] -> initial + [x, ..rest] -> do_product(rest, x *. initial) + } +} diff --git a/src/gleam/int.gleam b/src/gleam/int.gleam index 0bbd63d..002a155 100644 --- a/src/gleam/int.gleam +++ b/src/gleam/int.gleam @@ -167,3 +167,24 @@ fn do_sum(numbers: List(Int), initial: Int) -> Int { [x, ..rest] -> do_sum(rest, x + initial) } } + +/// Multiplies a list of Ints and returns the product. +/// +/// ## Example +/// +/// > product([2, 3, 4]) +/// 24 +/// +pub fn product(numbers: List(Int)) -> Int { + case numbers { + [] -> 0 + _ -> do_product(numbers, 1) + } +} + +fn do_product(numbers: List(Int), initial: Int) -> Int { + case numbers { + [] -> initial + [x, ..rest] -> do_product(rest, x * initial) + } +} |