Branch
Hash :
2cc3e8b4
Author :
Thomas de Grivel
Date :
2024-12-12T19:44:21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
defmodule List do
def append = cfn List "list_init_append" (Result, List, Tag)
def cast = cfn List "list_init_cast" (Result, Sym, Tag)
def count = fn {
(n) { count(n, []) }
(0, acc) { acc }
(n, acc) {
if n > 0 do
count(n - 1, [n | acc])
else
[]
end
}
}
def each = cfn Bool "list_each" (List, Callable, Result)
def filter = cfn List "list_filter" (List, Callable, Result)
def find_if = fn {
([], _) { false }
([a | b], f) do
c = f(a)
if c do
c
else
find_if(b, f)
end
end
}
def first = fn ([a | _]) { a }
def has? = cfn Bool "list_has" (List, Tag, Result)
def join = fn {
(list, separator) { join(list, separator, []) }
([], sep, acc) { str(reverse(acc)) }
([first, second | rest], sep, acc) {
join([second | rest], sep, [sep, first | acc])
}
([first], sep, acc) { str(reverse([first | acc])) }
}
def last = cfn Tag "list_last" (List, Result)
def map = cfn List "list_map" (List, Callable, Result)
def reverse = fn {
(x) { reverse(x, []) }
([], acc) { acc }
([a | b], acc) { reverse(b, [a | acc]) }
}
def sort = cfn List "list_sort" (List, Result)
def sort_by = cfn List "list_sort_by" (List, Callable, Result)
def to_array = cfn Array "kc3_list_to_array" (List, Sym, Result)
def unique = cfn List "list_unique" (List, Result)
end