在Haskell的Palindromes

Jon*_*FTW 1 haskell palindrome

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

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse [x*y] == [x*y]]
Run Code Online (Sandbox Code Playgroud)

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

R. *_*des 9

这部分

reverse [x*y] == [x*y]
Run Code Online (Sandbox Code Playgroud)

是错的.[x*y]是一个包含单个元素的列表:结果x*y.反面是相同的清单......

你想要的是数字反转的数字.您需要一个包含数字位数的列表.一个简单的技巧是将数字转换为其字符串表示(请记住type String = [Char]).为此,您可以使用show,而不是[ ]:

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse (show (x*y)) == show (x*y)]
Run Code Online (Sandbox Code Playgroud)