関数型プログラミング言語Haskell Part11

このエントリーをはてなブックマークに追加
516デフォルトの名無しさん
2つの同じ要素数のリスト (Num a) => [a] を、
片方を1要素分横にずらして和を取りたいです。
たとえば [1, 2, 3] と [7, 8, 9] であれば
[1, 2, 3, 0] と [0, 7, 8, 9] の和です。

今は定義を素直に実装して次のようにやってます。
shearAdd :: (Num a) => [a] -> [a] -> [a]
shearAdd as bs = zipWith (+) (as ++ [0]) (0 : bs)

もっと洗練された方法はあるでしょうか。
たとえば (++) 演算子は左辺のリストの要素数が大きいと不利なので、
これを改善できるとか。