如何获得haskell中字符的ascii值?

Chr*_*ris 23 ascii haskell

只是想知道如何在haskell中获得字符的ascii值?我试图在ghci中使用'ord'函数,基于我在这里阅读的内容:

http://haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Char.html#6

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>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

sth*_*sth 26

正如Travis Brown在评论中指出的那样,您必须ord从模块中导入该函数Data.Char:

import Data.Char (ord)

main = print (ord 'a')
Run Code Online (Sandbox Code Playgroud)

Prelude默认情况下仅加载模块,必须显式导入所有其他模块.

  • @Chris:默认情况下,只导入`Prelude`中定义的东西,对于其他模块,您必须指定其他导入. (2认同)

RnM*_*Mss 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'
...
Run Code Online (Sandbox Code Playgroud)

所以你可以使用fromEnumtoEnum,它使用ASCII码作为Int值.

Prelude> fromEnum 'A'
65
Prelude> fromEnum 'a'
97
Prelude> toEnum 9 :: Char
'\t'
Prelude> toEnum 100 :: Char
'd'
Run Code Online (Sandbox Code Playgroud)

  • 有什么理由*不*使用这个吗? (2认同)