Замена символов цифрами в Хаскеле - PullRequest
1 голос
/ 10 ноября 2009

Я начал задавать вопросы в Project Euler относительно списков имен, которые необходимо заменить на соответствующие им позиции в алфавите. В Задача 22 * ​​1002 * Мне нужно заменить, буквы на цифры:

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 Ответ

11 голосов
/ 10 ноября 2009

Функция ord в модуле Data.Char дает целочисленный код для каждого символа. Учитывая это, это будет функция, которую вы ищете:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...