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() {
let l = new()
let l2 = insert(l, 123) |> echo
let l3 = insert(l2, 456) |> echo
let l4 = insert(l3, 789)
let l5 = insert(l4, 0)
// let l = new()
// let l2 = insert(l, 123) |> echo
// let l3 = insert(l2, 456) |> echo
// let l4 = insert(l3, 789)
// let l5 = insert(l4, 0)
get(l5) |> echo
l5 |> echo
l5 |> to_list |> echo
let l6 = delete(l5)
l6 |> echo
let l7 = delete(l6)
l7 |> echo
let l8 = delete(l7)
l8 |> echo
let l9 = delete(l8)
l9 |> echo
// get(l5) |> echo
// l5 |> echo
// l5 |> to_list |> echo
// let l6 = delete(l5)
// l6 |> echo
// let l7 = delete(l6)
// l7 |> echo
// let l8 = delete(l7)
// l8 |> echo
// let l9 = delete(l8)
// l9 |> echo
from_list([1, 2, 3, 4]) |> echo
// from_list([1, 2, 3, 4]) |> echo
let l1 = new() |> insert(1)
l1 |> echo
@@ -43,6 +43,13 @@ pub fn main() {
l2 |> echo
let l2t = take(l2, 5)
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) {
@@ -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) {
case is_empty(list) {
True -> []