fold_left(fn, init, @rest xs, ...)
Return init if the list arguments xs, ... are empty. If they are not empty,
apply the function fn to the heads of
xs, ... and init, then recur with the value returned by fn in place of init and the
tails of xs, ....
The list arguments should all have the same length. Fn should accept one more argument than
the number of list arguments and return a single value. It should not mutate the lists.
fold_left(^(x, init) init + x * x, 0, [1, 2, 3, 4, 5])
// 55
fold_left(pair, [], [1,2,3,4])
// [4, 3, 2, 1]
fold_left(`-`, 0, [1, 2, 3, 4])
// 2