我正在使用 Project Euler 问题来学习 Haskell,并且我在许多这些问题中发现了一个反复出现的主题,我需要找到一个值n
来为函数提供一些属性(通常是最小值或最大值)f n
。当我建立一个解决方案时,我经常发现创建一个对列表很方便(n, f n)
。这有助于我快速查看我的逻辑是否有任何错误,因为我可以检查问题陈述中给出的示例。然后我“过滤”出给出解决方案的单对。我对问题 47 的解决方案就是一个例子:
-- Problem 47
import Data.List
import ProjectEuler
main = do
print (fst (head (filter (\(n, ds) -> (all (==consecutiveCount) ds))
(zip ns (map (map length)
(map (map primeDivisors) consecutives))))))
where consecutiveCount = 4
consecutive n start = take n [start..]
consecutives = map (consecutive consecutiveCount) ns
ns = [1..]
在我看来,有一个更“haskelly”的方式来做到这一点。在那儿?