我正在使用Project Euler Problem 4,并且需要找到2个3位数的乘积的回文,所以我想出了:
palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse [x*y] == [x*y]]
为什么这不起作用,我怎样才能使它工作? 我怀疑我需要以某种方式将答案放入列表中,以便反转并检查它是否是回文。
答案 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的整个目的,你可以看看: