【问题标题】:How to get the ASCII value of a character in Haskell?如何在 Haskell 中获取字符的 ASCII 值?
【发布时间】:2023-03-22 18:32:01
【问题描述】:

如何在 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>

我做错了什么?

【问题讨论】:

  • :module +Data.Char(在 GHCi 中)或 import Data.Char(在您的源文件中)。
  • @Travis Brown:你也可以在 ghci 中做import Data.Char
  • @newacct:酷——我不知道。 qualified &c。但是,显然不起作用。
  • @TravisBrown qualified 工作!

标签: haskell ascii


【解决方案1】:

您也可以使用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'
...

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

Prelude> fromEnum 'A'
65
Prelude> fromEnum 'a'
97
Prelude> toEnum 9 :: Char
'\t'
Prelude> toEnum 100 :: Char
'd'

【讨论】:

  • 有什么理由使用这个吗?
  • 我更喜欢 fromEnum / toEnum 到 'ord' 函数。它们也是前奏曲的一部分。
【解决方案2】:

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

import Data.Char (ord)

main = print (ord 'a')

默认只加载Prelude模块,其他所有模块都必须显式导入。

【讨论】:

  • 这只是 ghci 的事情吗?还是我在制作 .hs 文件时也必须导入这些模块?
  • @Chris:默认情况下只导入Prelude 中定义的内容,对于其他模块,您必须指定额外的导入。
猜你喜欢
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多