2006-10-21 [長年日記]

[Haskell] on

import Data.List

on :: (a -> a -> b) -> (c -> a) -> (c -> c -> b)
f `on` g = \x y -> g x `f` g y

のようなonを定義しておくと、

sortBy (compare `on` snd) [(1,2),(2,1),(1,3)]

のように書くことができます。以下と同じですが、ちょっと読みやすげ。

sortBy (\ (_, x) (_, y) -> compare x y) [(1,2),(2,1),(1,3)]

C++で書くときには合成用の関数を書きながらλ式が使えればいいのにと思い、Haskellで書くときにはλ式は面倒なので関数合成する方向にいくのは、C++で関数を合成する書き方が面倒だからでしょうか(もしくはboost::lambdaは引数を明示しないので楽だからか)。

[]