diff options
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) + } +} |