在Haskell中用数字替换字符

Jon*_*FTW 1 string haskell

我已经开始在项目Euler上做关于名称列表的问题,这些名称需要用字母表中的相应位置替换.在问题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))
Run Code Online (Sandbox Code Playgroud)

我找不到的是如何用字母替换字符.我该怎么做才能做替换功能(最好不是正则表达式)?

Tom*_*rst 11

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

import Data.Char

replace :: Char -> Int
replace c = ord c - ord 'A' + 1
Run Code Online (Sandbox Code Playgroud)

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

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