2009-11-10 4 views
1

알파벳의 해당 위치로 대체해야하는 이름 목록과 관련하여 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)) 

는 알파벳에서 자신의 자리로 문자를 대체하는 방법이다. 대체 기능 (선호하지 정규식) 할 무언가를 만드는 방법에 대해 갈까요?

답변

11

Data.Char 모듈의 ord 기능은 각 문자에 정수 코드를 제공합니다. ord c이 문자 또는 유니 코드 코드 포인트의 ASCII 코드를 반환합니다 경우, 또는 결과가 따라 기계 인 경우

import Data.Char 

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

잘 모르겠어요 : 이것이 당신이 찾고있는 기능이 될 것 감안할. 그로부터 추상화하려면 결과에서 'A'의 코드를 뺀 다음 0 대신 1에서 알파벳을 시작하기 때문에 1을 추가하십시오.

이러한 기능을 쉽게 찾을 수있는 방법은 Hoogle입니다.
표준 Haskell 패키지에서 해당 유형을 입력하여 함수를 검색 할 수 있습니다. 이 경우 Char -> Int을 검색 할 때 두 번째 결과는 ord입니다.

+0

'ord'는 문자의 ASCII 코드를 반환합니다. – Squidly