如何通过函数式编程提高效率?
最近,我一直在阅读“ 学习Haskell以获得卓越成就”指南,并且作为练习,我想用它来解决Euler问题5,该问题指定了: 能被1到20的所有数均分的最小正数是多少? 我决定首先编写一个函数,以确定给定数字是否可被这些数字整除: divisable x = all (\y -> x `mod` y == 0)[1..20] 然后,我使用计算了最小的head: sm = head [x | x <- [1..], divisable x] 最后写一行来显示结果: main = putStrLn $ show $ sm 不幸的是,这花了大约30秒才能完成。用数字1到10进行相同的操作几乎会立即产生结果,但是结果又比1到20的解小得多。 我在C中较早地解决了该问题,并且几乎立即就可以计算出1到20的结果。这使我相信我误解了如何为Haskell解释这个问题。我查看了其他人的解决方案,发现了以下几点: main = putStrLn $ show $ foldl1 lcm [1..20] 公平地说,这使用了内置函数,但是为什么自己动手最终结果会这么慢?那里的教程告诉您如何使用Haskell,但是在将算法转换为快速代码方面我没有看到太多帮助。