【发布时间】:2013-03-16 04:31:33
【问题描述】:
我需要计算foo n = maximumBy (comparing p) [1..n],其中p :: Int -> Int 很慢。但我知道p n < n 代表所有n > 0,并希望通过以下方式加快计算速度:我计算p x 代表x 从n 开始到1,记住当前最大。一旦我达到小于或等于当前最大值的x,我就知道这个最大值必须是全局最大值,我就完成了。
所以我的尝试看起来像这样:
foo n = go (0, 0) n where
go (c, _) 1 = c
go (c, c') !x = if c' >= x then c else go (c2, c'2) (x-1) where
x' = p x
(c2, c'2) = if c' >= x' then (c, c') else (x, x')
这可行,但看起来不是很惯用。所以我正在寻找一个更优雅的解决方案。你有什么建议吗?
【问题讨论】: