[]T — встроенный динамический массив Nova (синтаксис D27, представление D32 (ptr, len, cap)). Встроенный API — len, cap, push, pop, with_capacity, [i] — предоставляется компилятором. Этот модуль добавляет функциональные комбинаторы через обобщённые параметры получателя (D35).
ro nums []int = [1, 2, 3, 4, 5]
ro squared = nums.map(|x| x * x)
ro evens = nums.filter(|x| x % 2 == 0)
ro total = nums.fold(0, |acc, x| acc + x)
assert(total == 15)
map
стабильно с 0.1fn []T @map[U](f fn(T) -> U) -> []U
Применяет f к каждому элементу и возвращает новый массив []U. Метод-уровневый обобщённый параметр [U] (D42) позволяет одному методу []T возвращать любой целевой тип.
Примеры
ro v []int = [1, 2, 3]
assert(v.map(|x| x * 2) == [2, 4, 6])
filter
стабильно с 0.1fn []T @filter(pred fn(T) -> bool) -> []T
Возвращает новый массив, содержащий только элементы, для которых pred(x) равен true. Сохраняет порядок. Исходный массив не изменяется.
Примеры
ro v []int = [1, 2, 3, 4, 5]
assert(v.filter(|x| x % 2 == 0) == [2, 4])
fold
стабильно с 0.1fn []T @fold[Acc](init Acc, f fn(Acc, T) -> Acc) -> Acc
Левая свёртка (reduce). Начинает с аккумулятора init и применяет f(acc, x) для каждого элемента. Метод-уровневый обобщённый параметр [Acc] не зависит от T, поэтому можно свернуть []int в str и так далее.
Примеры
ro v []int = [1, 2, 3, 4]
assert(v.fold(0, |acc, x| acc + x) == 10)
any
стабильно с 0.1fn []T @any(pred fn(T) -> bool) -> bool
Возвращает true, если хотя бы один элемент удовлетворяет pred. Останавливается на первом совпадении. На пустом массиве возвращает false.
Примеры
ro v []int = [1, 2, 3]
assert(v.any(|x| x > 2))
assert(!v.any(|x| x > 10))
all
стабильно с 0.1fn []T @all(pred fn(T) -> bool) -> bool
Возвращает true, если каждый элемент удовлетворяет pred. Останавливается на первом несовпадении. Пустая истинность: на пустом массиве возвращает true.
Примеры
ro v []int = [2, 4, 6]
assert(v.all(|x| x % 2 == 0))
first
стабильно с 0.1fn []T @first() -> Option[T]
Возвращает первый элемент, обёрнутый в Some(T), либо None, если массив пуст.
Примеры
ro v []int = [10, 20, 30]
assert(v.first() == Some(10))
assert([]int.new().first() == None)
last
стабильно с 0.1fn []T @last() -> Option[T]
Возвращает последний элемент, обёрнутый в Some(T), либо None, если массив пуст.
Примеры
ro v []int = [10, 20, 30]
assert(v.last() == Some(30))
assert([]int.new().last() == None)