如何在Haskell中获取字符的ASCII值?我试图在GHCi中使用ord
函数,根据我读到的here错误消息:
不在范围内:`ord'
例如:
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> ord 'a'
<interactive>:1:0: Not in scope: `ord'
Prelude>
我做错了什么?
答案 0 :(得分:25)
在评论中指出Travis Brown,您必须从模块Data.Char
导入ord
函数:
import Data.Char (ord)
main = print (ord 'a')
默认情况下只加载Prelude
模块,所有其他模块都必须明确导入。
答案 1 :(得分:12)
您也可以使用fromEnum
。 (在Enum
课程中定义,来自Prelude。)
Prelude> :i Char
data Char = GHC.Types.C# GHC.Prim.Char# -- Defined in `GHC.Types'
instance Enum Char -- Defined in `GHC.Enum'
instance Eq Char -- Defined in `GHC.Classes'
...
因此,您可以使用fromEnum
和toEnum
,它使用ASCII代码作为Int值。
Prelude> fromEnum 'A'
65
Prelude> fromEnum 'a'
97
Prelude> toEnum 9 :: Char
'\t'
Prelude> toEnum 100 :: Char
'd'