Underscore.jsCoffeeScriptとUnderscore.jsの組み合わせで関数型言語のようなリスト主体のプログラミングをすることができます。_.mixinで_オブジェクトを拡張してみます。keysとvaluesからObjectを作成する_.pairsUnderscore.jsには、Objectから(1)キーだけを配列として取り出す_.keysと、(2)値だけを配列として取り出す_.valuesという関数があります。逆に、keysとvaluesからObjectを作成するような関数がありません。v1.4.xで_.objectとして追加されたようです。いうことで、やってみます。r2_.extend2を作成している理由は、reduce*1の仕様に起因します。_.extendを渡すと、第4引数に処理対象の配列自身が入るためです。{}というのは、如何せんスマートじゃないので直します。Haskellとかでは合成関数で書くと良い感じになるので、Underscore.jsの_.composeを使ってみます。引数の順番や、関数がカリー化されていない都合上、無名関数を使わざるをえないのと*2、_.composeとCoffeeScriptの相性が微妙です。CoffeeScriptは関数の引数に無名関数が出てくると、途端に書きづらくなるのがネックですね。実はUnderscore.jsには_.chainというのがあるので、配列を連続して処理したい時はコレを使うのがよさそうです。rだいぶ見やすくなったのではないでしょうか。配列から、2n番目をキー、2n+1番目を値とするオブジェクトを作成する_.pairNextやってみます。rUnderscore.jsとCoffeeScriptと組み合わせれば、実にキモくスマートに書けます。クラスをbindでスマートにする以下の様なシチュエーションを考えます。4Hoge.bindでkeyを固定化することができます。fnXが増えた時に、個別に_.bindを書くのは嫌なので、exportしたい関数名を配列でまとめます。先ほどの_.pairNextを使ってみます。