我刚开始学习Haskell。我试图在列表中找到一个x,其中score x
具有最大值。我尝试了snd (maximum [(score x, x) | x <- codes])
这是可行的,但我想知道是否有更快的方法来做到这一点,而没有实际存储函数和值。Haskell:f(x)最大的列表中的x x
感谢您的任何建议!
我刚开始学习Haskell。我试图在列表中找到一个x,其中score x
具有最大值。我尝试了snd (maximum [(score x, x) | x <- codes])
这是可行的,但我想知道是否有更快的方法来做到这一点,而没有实际存储函数和值。Haskell:f(x)最大的列表中的x x
感谢您的任何建议!
不要担心被存储的分数 - Haskell和GHC的工作方式,他们不会。例如,编译的程序'main = print(maximum [(2 * x,x)| x < - [1..100000000000] :: [Int]])'可能需要大约10-15分钟才能运行,所以在小的,持续的记忆中,因为编译器会确定代码和分数都不需要保留以获得答案。 –
请注意,如果任何代码具有相同的分数,则会通过选择最大代码来在它们之间进行选择,但是'Ord'是为该类型定义的。这可能是也可能不是你想要的。 – Carl
'snd。 maximumBy(比较fst)。 map(score &&& id)'也适用于非'Ord'类型。 –