Haskell中的中间列表

时间:2009-10-23 07:53:19

标签: list haskell syntax

我在Lychrel数字上做Project Euler question 55,其目的是在50次迭代中找到低于10,000的Lychrel数。我想出了这个:

revAdd n = (read $ reverse $ show n) + n

lychrel n | length xs == 50 = error "False"
          | ((reverse $ show (revAdd n)) == (show (revAdd n)))  = True
          | otherwise  = (lychrel (revadd n) ) : xs

answer = length [ x | x <- [1..10000] , lychrel x == True]

但我不知道如何将xs定义为n之前迭代的列表,这些列表是n不是回文的时候。我该怎么做呢,其次这会有用吗?

2 个答案:

答案 0 :(得分:3)

如果您将您的顾虑分成不同的步骤,那就容易多了。

  1. 定义一个对数字及其反转求和的函数。
  2. 使用iterate重复您的号码,从x开始。
  3. 使用take将迭代次数限制为50步。
  4. all与谓词一起使用,以确定是否有任何这些步骤导致回文结构。

答案 1 :(得分:2)

您需要将迭代列表(或迭代次数)作为参数传递给lychrel,从[]调用answer开始并添加到otherwise在{{1}}案例中的递归调用中。查找“累积参数”以获得有关此技术的更一般背景信息。