2009-11-10 61 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