aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRichard Viney <richard.viney@gmail.com>2024-10-07 17:40:31 +1300
committerLouis Pilfold <louis@lpil.uk>2024-10-08 12:16:44 +0100
commit0a087d5d80b803e70909848f5b7b28ce2b5df4fc (patch)
treee67d3d529e565d89b76e7cfe76caf72c684e7102 /src
parent3b966c2715593d07bfa1208879aa5ccbdb648dbc (diff)
downloadgleam_stdlib-0a087d5d80b803e70909848f5b7b28ce2b5df4fc.tar.gz
gleam_stdlib-0a087d5d80b803e70909848f5b7b28ce2b5df4fc.zip
Optimise string.repeat
Diffstat (limited to 'src')
-rw-r--r--src/gleam/string.gleam12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/gleam/string.gleam b/src/gleam/string.gleam
index e530c8f..0906481 100644
--- a/src/gleam/string.gleam
+++ b/src/gleam/string.gleam
@@ -438,10 +438,14 @@ pub fn concat(strings: List(String)) -> String {
/// ```
///
pub fn repeat(string: String, times times: Int) -> String {
- iterator.repeat(string)
- |> iterator.take(times)
- |> iterator.to_list
- |> concat
+ do_repeat(string, times, "")
+}
+
+fn do_repeat(string: String, times: Int, acc: String) -> String {
+ case times <= 0 {
+ True -> acc
+ False -> do_repeat(string, times - 1, acc <> string)
+ }
}
/// Joins many `String`s together with a given separator.