在Haskell的Palindromes

时间:2009-08-11 02:04:00

标签: haskell palindrome

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

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

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

2 个答案:

答案 0 :(得分: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)]

答案 1 :(得分:2)

您不希望将反向功能应用于包含单个数字的列表。您需要将反向函数应用于该数字的字符串表示。

尝试使用“show”功能。

另外,如果你有足够的力量避免查看并破坏Project Euler的整个目的,你可以看看:

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