豊福です。

  transpose を使うと以前でてきた

>  update (d:ds) (a:as) = a : update ds as
>  update [] as = as
>  update ds [] = ds

も update ds = map head . transpose . (:[ds])
と書けますね。

  それと、高階関数に慣れるための練習として

> xp zero add mul xs ys =
>   map (foldl1 add)
>   $ transpose
>   $ zipWith (map . mul) xs
>   $ iterate (zero:) ys

を xs ys なしで書いてみました。

xp zero add mul =
  ((map (foldl1 add) . transpose) .)
  . ((. iterate (zero:)) . zipWith (map . mul))

  わかりにくくなった…
---
                        豊福
                        nobu_toyofuku / nifty.com


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/