2009-11-10 59 views
1

我已經開始在Project Euler上就需要用字母表中的相應位置替換的名稱列表進行相關的問題。在Problem 22我需要用數字來代替,字母:用Haskell中的數字替換字符

names = ["MARY","PATRICIA","LINDA".... 
replace = ?????? 
char2num a = map replace a 
score (a,b) = a * (sum $ map char2num b) 
answer = sum $ map score (zip [1..] (sort names)) 

我找不到什麼是如何與他們的字母表的地方替換的字符。我會如何去做一些替代功能(最好不是正則表達式)?

回答

11

Data.Char模塊中的ord函數給出每個字符的整數代碼。鑑於此,這將是您正在尋找的功能:我不知道

import Data.Char 

replace :: Char -> Int 
replace c = ord c - ord 'A' + 1 

如果ord c將返回ASCII碼爲一個字符,或unicode的碼點,或者如果結果是依賴於機器。要從中抽象出來,我們只需從結果中減去'A'的代碼,並添加1,因爲我們希望字母從1開始,而不是0

找到這種功能的簡單方法是Hoogle
在那裏你可以通過輸入它的類型來搜索標準Haskell包中的函數。在這種情況下,ord是搜索Char -> Int時的第二個結果。

+0

'ord'將返回一個字符的ASCII碼 – Squidly 2014-11-06 14:01:56