gpt4 book ai didi

haskell - 在 Haskell 中表达长链组合

转载 作者:行者123 更新时间:2023-12-04 01:35:37 26 4
gpt4 key购买 nike

(不重要的背景信息/动机)

我正在实现 nub 的不同版本,灵感来自 Yesod book's discouragement使用它。

map head . group . sort is more efficient than a call to nub. However, in our case, order is important...



所以我开始写一个类似于顺序不重要版本的“更好”的小块。我最终得到了这个:
mynub = unsort . map head . groupBy (\x y -> fst x == fst y) . sortBy (comparing fst) . rememberPosition

rememberPosition = flip zip [0..]
unsort = map fst . sortBy (comparing snd)

这当然做了很多额外的工作,但它应该是 O(n log n) 而不是原始 nub 的 O(n2)。但这无关紧要。问题是,太长了!它真的没有那么复杂,但它很长(我是那些讨厌超过 80 列或 StackOverflow 代码块上的水平滚动条的人之一)。

(问题)

Haskell中有什么更好的方法来表达这样的长链函数组合?

最佳答案

拆线,并使用布局:

mynub = unsort 
. map head
. groupBy ((==) `on` fst)
. sortBy (comparing fst)
. rememberPosition

关于haskell - 在 Haskell 中表达长链组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5725324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com