These functions take an array and a LAMBDA and run the LAMBDA over the array for you:
MAP(array, LAMBDA(v, ...)): once per value, same shape back.
BYROW(array, LAMBDA(row, ...)): once per row, one result per row (BYCOL does columns).
REDUCE(start, array, LAMBDA(total, v, ...)): carries a running value through the array and returns the last one.
SCAN(start, array, LAMBDA(total, v, ...)): the same, but returns every step, which makes running totals.
They all spill. Use them when a row-by-row rule doesn't fit a single built-in function, such as "best quiz of each student" or "total after each week".