急勾配の判定

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