如何将数字 1-26 分配给字母 a-z,然后对 Haskell 中的字符串输出求和?

How to assign numbers 1-26 to letters a-z and then sum the output of a string in Haskell?

我的任务是编写一个 Haskell 程序,它会提示用户输入一个字符串,然后程序会为每个字母分配一个数字(例如 a = 1、d = 4、 y = 25, z = 26) 然后它将对字符串的总数求和。示例“Hi”等于 8 + 9 或 17。我有一些事情要做第一部分,但前提是它全部大写,但我仍然不知道如何求和输出列表。

import Data.Char

toOrder :: [Char] -> [Int]
toOrder str = map ((\x -> x - 64) . ord) str

想法?

您可以使用 toUpper 对字符进行正则化,并使用 sumInt 的列表求和:

import Data.Char (ord, toUpper)

main = print $ score "Hi" -- 17

score :: String -> Int
score = sum . map (subtract 64 . ord . toUpper)