等差数列

目標

配列の隣接する2項にそれぞれ演算を施した配列を得たい。つまり、
f (+) [1,2,3,4,5] = [3,5,7,9]
のような f が欲しい。

結果

OCaml はオワコンだった
(こうすればうまく書けるよ、というのがあれば教えてください)

愚直(Haskell)
f g []       = []
f g [_]      = []
f g (x:y:zs) = g x y : f g (y:zs)
Haskell
f g x = zipWith g x (tail x)
F#
let uncurry g (a, b) = g a b
let f g x = Seq.map (uncurry g) (Seq.pairwise x)
Ruby

keyesberry さんより

def f(x)
   x.each_cons(2).map{|y,z| yield(y,z)}
end
Ruby(無理やり)
def f(x, &b)
   x[0..-2].zip(x.drop(1)).map { |y, z| b.call(y, z) }
end