リストがソート済みかどうか
isSorted :: (Ord a) => [a] -> Bool isSorted [] = True isSorted [_] = True isSorted l = and $ zipWith (<) l (tail l)
こんな感じに書ける。最近、zipやzipWith、mapといった基本的な高階関数が最初から(もしくは、builtinのモジュールとして)存在しているかどうかによって、その言語でどういう風に考えるか決まってくるように感じる。
[1,2,3,4]
を例に取ると、zipWithを使って[1 < 2, 2 < 3, 3 < 4]
を作り、andで全てTrueかどうか調べている。