feat: Added take_rev
Some checks failed
test / test (push) Has been cancelled

This commit is contained in:
2025-10-17 23:23:34 +01:00
parent 413c2258f7
commit 8a01142ad7

View File

@@ -15,25 +15,25 @@ pub type DLList(a) {
} }
pub fn main() { pub fn main() {
let l = new() // let l = new()
let l2 = insert(l, 123) |> echo // let l2 = insert(l, 123) |> echo
let l3 = insert(l2, 456) |> echo // let l3 = insert(l2, 456) |> echo
let l4 = insert(l3, 789) // let l4 = insert(l3, 789)
let l5 = insert(l4, 0) // let l5 = insert(l4, 0)
get(l5) |> echo // get(l5) |> echo
l5 |> echo // l5 |> echo
l5 |> to_list |> echo // l5 |> to_list |> echo
let l6 = delete(l5) // let l6 = delete(l5)
l6 |> echo // l6 |> echo
let l7 = delete(l6) // let l7 = delete(l6)
l7 |> echo // l7 |> echo
let l8 = delete(l7) // let l8 = delete(l7)
l8 |> echo // l8 |> echo
let l9 = delete(l8) // let l9 = delete(l8)
l9 |> echo // l9 |> echo
from_list([1, 2, 3, 4]) |> echo // from_list([1, 2, 3, 4]) |> echo
let l1 = new() |> insert(1) let l1 = new() |> insert(1)
l1 |> echo l1 |> echo
@@ -43,6 +43,13 @@ pub fn main() {
l2 |> echo l2 |> echo
let l2t = take(l2, 5) let l2t = take(l2, 5)
l2t |> echo l2t |> echo
let l3 = insert(l2, 3)
l3 |> echo
let l3t = take(l3, 7)
l3t |> echo
let l3t2 = take_rev(l3, 7)
l3t2 |> echo
} }
pub fn new() -> DLList(a) { pub fn new() -> DLList(a) {
@@ -210,6 +217,21 @@ fn take_loop(list: DLList(a), n_times: Int, acc: List(a)) -> List(a) {
} }
} }
pub fn take_rev(list: DLList(a), n_times: Int) -> List(a) {
take_rev_loop(list, n_times, [])
}
fn take_rev_loop(list: DLList(a), n_times: Int, acc: List(a)) -> List(a) {
use <- bool.guard(when: is_empty(list), return: [])
case n_times {
0 -> list.reverse(acc)
n -> {
let assert Ok(item) = get(list)
take_rev_loop(move_left(list), n - 1, [item, ..acc])
}
}
}
pub fn to_list(list: DLList(a)) -> List(a) { pub fn to_list(list: DLList(a)) -> List(a) {
case is_empty(list) { case is_empty(list) {
True -> [] True -> []