sortBy
和 unionBy
等函数将 lambda 函数作为参数。 lambda 函数通常在从列表元素中取出一部分后执行 compare
或 eq
。例如,
f v1 v2 = sortBy (\x y -> compare (fst x) (fst y)) $
unionBy (\x y -> (fst x) == (fst y)) (zip v1 [0..]) (zip v2 [0..])
只是想知道 lambda 函数
\x y -> compare (fst x) (fst y)
是否可以写得更简洁。 最佳答案
我发现
compare `on` fst
是我写
\x y -> compare (fst x) (fst y)
时写的。您可以在
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
中找到 Data.Function
。所以你的代码将是f v1 v2 = sortBy (compare `on` fst) $
unionBy ((==) `on` fst) (zip v1 [0..]) (zip v2 [0..])
关于list - 如何编写更简洁的 sortBy、unionBy 等 lambda 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20447427/