我正在尝试在列表中查找一个 x,它的 score x 值最大。我尝试了 snd (maximum [(score x, x) | x <- codes]) 这个方法可以工作,但我想知道是否有更快的方法来做到这一点,而不实际存储函数和值。
您的解决方案很好。如果您需要一些库的帮助,可以使用:maximumBy (comparing score) codes 请注意,与您的代码相比,这段代码将执行更多次 score 的调用。如果计算 score 的成本很高,那么您的方法更好,因为它只会针对列表元素计算一次 score。
main = print (maximum [(2*x, x) | x <- [1..100000000000] :: [Int]])
可能需要大约 10-15 分钟才能运行,但由于编译器将确定代码和分数都不需要保留以获得答案,因此它将在小而恒定的内存中运行。 - K. A. BuhrOrd
已经定义。这可能是您想要的,也可能不是。 - Carlsnd . maximumBy (comparing fst) . map (score &&& id)
对于非Ord
类型也适用。 - Will Ness