문자를 해당 ASCII Int로 변환하려면 fromEnum
함수를 사용하고 있습니다. 예를 들어 :Haskell : int to Char
fromEnum 'A'
반환 65
지금, 나는 한 함수했다 가정하면
(fromEnum 'A')+1
을 한 후 숯불에 반환 된 값 (66)을 변환하고 싶어하는 것 'B'가 되라. 그렇게하는 가장 좋은 방법은 무엇입니까?
감사합니다.
문자를 해당 ASCII Int로 변환하려면 fromEnum
함수를 사용하고 있습니다. 예를 들어 :Haskell : int to Char
fromEnum 'A'
반환 65
지금, 나는 한 함수했다 가정하면
(fromEnum 'A')+1
을 한 후 숯불에 반환 된 값 (66)을 변환하고 싶어하는 것 'B'가 되라. 그렇게하는 가장 좋은 방법은 무엇입니까?
감사합니다.
당신은 당신이 원하는 동작을 구현하기 위해 succ
을 사용할 수 있습니다 : 당신은 Data.Char
에서 ord :: Char -> Int
및 chr :: Int -> Char
기능을 사용할 수 있습니다
nextLetter :: Char -> Char
nextLetter c
| c == 'Z' = 'A'
| otherwise = succ c
.
> chr (ord 'a' + 1)
'b'
하지만 ghci에서 소스 파일에
import Data.Char
또는
:m +Data.Char
하는 것을 잊지 마십시오.
fromEnum :: Enum a => a -> Int
및 toEnum :: Enum a => Int -> a
과 같은 일 :
toEnum (fromEnum 'a' + 1) :: Char
이 식의 마지막 부분은 우리가 타입 시스템이 적당한 유형을 추론 할 수 있도록 기대하고 하스켈 유형을 말한다. 그러나이 경우 우리는 :: Char
을 드롭 할 수 있습니다 Char -> Bool
을 입력있다
isLower $ toEnum (fromEnum 'a' + 1)
isLower
때문이다. 따라서 toEnum (fromEnum 'a' + 1)
은 Char
이 될 것으로 예상됩니다.
어쨌든 bheklilr의 해답은 충분합니다 :) 저는 여러분에게 문제를 해결할 수있는 몇 가지 방법을 보여주고 싶었습니다.
좀 더 일반적인 문제인 'ord'와'chr'에 대한 관용구. 나는 그것을 지적하는 것이 좋은 생각이라고 생각합니다. 그러나이 특별한 문제 때문에 @bheklilrs 솔루션은 분명히 짧았습니다. – kqr
왜 'succ'를 사용하지 않습니까? ([hoogle] (http://hackage.haskell.org/package/base-4.6.0.1/docs/Prelude.html#t:Enum)) –
@MattFenwick 그 이유는 내가 char 연속되는 'A'는 'Z'가됩니다. 그러나 나는 당신의 제안으로 그 문제를 해결할 수 있다고 생각합니다. 감사합니다! :) – MrD
당신이 말한 문제가 루트 문제가 아니라는 것을 암시하는 것처럼 보이므로 실제 문제를 설명하기 위해 다시 작성하는 것이 좋습니다. –