2009-08-11 46 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