Skip to content

Commit 155b4c2

Browse files
committed
added to stdlib
1 parent 1307507 commit 155b4c2

2 files changed

Lines changed: 29 additions & 3 deletions

File tree

Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@ RUN dune build
1717
RUN mkdir -p ~/.local/bin
1818
RUN cp _build/default/bin/rustscript_cli.exe ~/.local/bin/rustscript
1919
ENV PATH $PATH:~/.local/bin
20+
21+
WORKDIR /home/opam
22+
RUN rm -rf RustScript2

lib/stdlib.rsc

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,26 @@
1+
let starts_with(ls, prefix) = take(length(prefix), ls) == prefix
2+
3+
let replace_substr(str, substr, replacement) = {
4+
let substr_chars = to_charlist(substr)
5+
let substr_len = length(substr_chars)
6+
let replacement_chars = to_charlist(replacement)
7+
8+
let loop = fn(chars, acc) => match chars
9+
| [] ->
10+
reverse(acc)
11+
12+
| _ when starts_with(chars, substr_chars) -> {
13+
let remaining = drop(length(substr_chars), chars)
14+
loop(remaining, reverse(replacement_chars) + acc)
15+
}
16+
17+
| [c | xs] ->
18+
loop(xs, [c | acc])
19+
20+
let string_chars = to_charlist(str)
21+
loop(string_chars, []) |> concat
22+
}
23+
124
let merge_maps(m1, m2) = {
225
let m1_list = map_to_list(m1)
326
fold(m2, fn(acc, (k, v)) => %{k => v | acc}, m1_list)
@@ -107,10 +130,10 @@ let split_at(n, ls) =
107130
if n <= 0 then {
108131
([], ls)
109132
} else {
110-
let loop(n, xs, acc) =
133+
let loop(n, ls, acc) =
111134
if n == 0 then
112-
(reverse(acc), xs)
113-
else match xs
135+
(reverse(acc), ls)
136+
else match ls
114137
| [] -> (ls, acc)
115138
| [x | xs] -> loop(n - 1, xs, [x | acc])
116139

0 commit comments

Comments
 (0)