急勾配の判定

id:edvakfさんがやってるのを見かけたので久しぶりに。


どう書く?org にはこれをポストしたんだけど:

 import List
 
 steep xs = and $ zipWith (>) xs $ map sum $ tail $ tails xs


$ が多くてうっとうしいからがんばって無くしてみた。ついでに引数もなくなった。

 import List
 
 steep2 = and . s (zipWith (>)) sums
   where
     s f g x = f x (g x)
     sums = map sum . tail . tails

なんかかえって解りにくいかも。


実行結果:

 *Main> steep2 [32,16,8,4,2,1]
 True
 *Main> steep2 [31,16,8,4,2,1]
 False