我认为形成这个问题的最好方法是举一个例子……所以,我决定问这个问题的真正原因是因为Project Euler 上的问题 55。在这个问题中,它要求找到低于 10,000 的 Lychrel 数。在命令式语言中,我会得到导致最终回文的数字列表,并将这些数字推送到我的函数之外的列表中。然后我会检查每个传入的号码,看看它是否是该列表的一部分,如果是,只需停止测试并得出该号码不是 Lychrel 号码的结论。我会对非 lychrel 数字及其前面的数字做同样的事情。
我以前做过,效果很好。然而,在 Haskell 中实际实现这一点似乎很麻烦,而不向我的函数添加一堆额外的参数来保存前辈,以及一个绝对父函数来保存我需要存储的所有数字。
我只是想知道这里是否缺少某种工具,或者是否有任何标准可以做到这一点?我读过 Haskell 的那种“自然缓存”(例如,如果我想将奇数定义为odds = filter odd [1..]
,我可以随时引用它,但是当我需要动态地将元素添加到列表。
关于如何解决这个问题的任何建议?
谢谢。
PS:我不是要对 Project Euler 问题的答案,我只是想更好地了解 Haskell!