Branch
Hash :
d1218371
Author :
Jeremy JEANNE
Date :
2025-03-04T18:11:40
fix List.count_items
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80
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 count_items = fn {
(list) { count_items(list, %{}) }
([], map) { map }
([first | rest], map) {
count = if map[first] do map[first] else 0 end
map = Map.put(map, first, count + 1)
count_items(rest, map)
}
}
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 length = cfn Tag "kc3_list_length" (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 slice = cfn List "list_slice" (List, Tag, Tag, Result)
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