在Haskell中用数字替换字符

时间:2009-11-10 07:22:36

标签: string haskell

我已经开始在Project Euler上提出有关名称列表的问题,这些名称需要替换为字母表中的相应位置。在Problem 22我需要替换,带有数字的字母:

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))

我找不到的是如何将字符替换为字母表中的位置。我怎样才能做一些替换功能(最好不是正则表达式)?

1 个答案:

答案 0 :(得分:11)

ord模块中的Data.Char函数为每个字符提供整数代码。鉴于此,这将是您正在寻找的功能:

import Data.Char

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

我不确定ord c是否会返回字符或unicode代码点的ASCII代码,或者结果是否依赖于机器。要从中抽象出来,我们只需从结果中减去'A'的代码,然后添加1,因为我们希望字母表从1而不是0开始。

找到找到这样一个函数的简单方法是Hoogle 在那里,您可以通过输入其类型来搜索标准Haskell包中的函数。在这种情况下,ord是搜索Char -> Int时的第二个结果。