function _aperture(n, list) {
    var idx = 0;
    var limit = list.length - (n - 1);
    var acc = new Array(limit >= 0 ? limit : 0);
    while (idx < limit) {
      acc[idx] = Array.prototype.slice.call(list, idx, idx + n);
      idx += 1;
    }
    return acc;
  }
ap applies a list of functions to a list of values.

Dispatches to the `ap` method of the first argument, if present. Also
treats curried functions as applicatives.

@func
@memberOf R
@since v0.3.0
@category Function
@sig [a -> b] -> [a] -> [b]
@sig Apply f => f (a -> b) -> f a -> f b
@sig (r -> a -> b) -> (r -> a) -> (r -> b)
@param {*} applyF
@param {*} applyX
@return {*}
@example

     R.ap([R.multiply(2), R.add(3)], [1,2,3]); //=> [2, 4, 6, 4, 5, 6]
     R.ap([R.concat('tasty '), R.toUpper], ['pizza', 'salad']); //=> ["tasty pizza", "tasty salad", "PIZZA", "SALAD"]

     // R.ap can also be used as S combinator
     // when only two functions are passed
     R.ap(R.concat, R.toUpper)('Ramda') //=> 'RamdaRAMDA'
@symb R.ap([f, g], [a, b]) = [f(a), f(b), g(a), g(b)]