2009-08-11 51 views
1

我工作的项目欧拉Problem 4,需要找2个3位数字的产品的回文,所以我想出了:回文结构哈斯克尔

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

为什么不这项工作,以及如何我可以使它工作吗? 我怀疑我需要以某种方式将答案列入清单,以便将其倒转并检查它是否是回文。

回答

9

这部分

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

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

你想要的是其数字相反的数字。你需要一个包含数字位数的列表。一个简单的技巧就是将数字转换为字符串表示形式(请记住type String = [Char])。顺便说一句

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse (show (x*y)) == show (x*y)] 
+0

:要做到这一点,你可以用show,而不是[ ]这段代码告诉我的答案是906609. – 2009-08-11 02:21:16

+0

但我想计算它!无论如何谢谢 – 2009-08-11 02:42:02

+0

对不起,如果我毁了你运行代码并查看结果找出答案的喜悦。哦......那种温暖的模糊感......这不是我的意图:) – 2009-08-11 03:02:56

2

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

尝试使用“显示”功能。

另外,如果你有足够的实力,以避免在看它,破坏项目欧拉的全部目的,你可以看看这个:

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