1

我正在研究 Project Euler Problem 4,需要找到 2 个 3 位数字乘积的回文,所以我想出了:

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse [x*y] == [x*y]]

为什么这不起作用,我怎样才能使它起作用?我怀疑我需要以某种方式将答案放入列表中,以便将其反转并检查它是否是回文。

4

2 回答 2

9

这部分

reverse [x*y] == [x*y]

是错的。[x*y]是一个具有单个元素的列表: 的结果x*y。反面是同一个列表...

你想要的是数字颠倒的数字。您需要一个包含号码数字的列表。一个简单的技巧就是将数字转换为它的字符串表示(记住type String = [Char])。为此,您可以使用show, 而不是[ ]

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse (show (x*y)) == show (x*y)]
于 2009-08-11T02:17:48.963 回答
2

您不想将 reverse 函数应用于包含单个数字的列表。您需要将 reverse 函数应用于该数字的字符串表示形式。

尝试使用“显示”功能。

另外,如果你有足够的力量避免看它并破坏欧拉计划的整个目的,你可以看看这个:

http://www.haskell.org/haskellwiki/Euler_problems

于 2009-08-11T02:17:13.023 回答