CFML implementation of Array.reduce()
Interesting discussion! 

@AdamTuttle Regarding the behavior in Underscore that you've highlighted: 
I did some quick tests and found that the same behavior exists in Ruby and native JS (Chrome and FF). This confirmed my suspicions that this seemingly weird behavior is just a product of the reduce algorithm itself. 

In the algorithm, "memo" represents the current state of the fold operation. If you don't pass in an initial value, you're implying that the first element of the collection represents the initial state of the fold. From that perspective, the behavior you've shown is exactly what I'd expect. 

If you want to remove uppercase letters from a collection and convert that to a string in a functional way, it would make more sense to call filter() to and then reduce(). Example: 

adamArr = ['A','d','a','m'];
damArr = _.filter(adamArr, function (letter) { 
    var asciiCode = asc(letter); 
    return asciiCode &gt;= 97 &amp;&amp; asciiCode &lt;= 122;
};
damString = _.reduce(damArr, function (memo, letter) {
    return memo &amp; letter;
};