sortByunionBy 等函数将 lambda 函数作为参数。 lambda 函数通常在从列表元素中取出一部分后执行 compareeq。例如,

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/

10-11 13:31