gpt4 book ai didi

haskell - Haskell 中的 Char 算术

转载 作者:行者123 更新时间:2023-12-02 13:32:29 27 4
gpt4 key购买 nike

在许多语言中,您可以为某个整数 i 编写 'A' + i 以获得字母表中的字母。我怎样才能在 Haskell 中做到这一点? (还有相反的操作,例如 let ch = 'B' in (ch - 'A')) == 1)

Prelude> 'A' + 1
No instance for (Num Char) arising from a use of `+'

最佳答案

正如评论中所指出的,您可以使用 Data.Char 中的函数在 IntChar 之间进行转换。然而,这并不像您要求的那么隐含。

如果你真的想要这个,理论上你可以创建一个 Num 实例,例如如下:

import Data.Char (chr, ord)

instance Num Char where
c1 + c2 = chr (ord c1 + ord c2)
c1 - c2 = chr (ord c1 - ord c2)
fromInteger = chr . fromInteger

然后你就得到了

> 'A' + 1
'B'

> 'B' - 'A' == 1
True

但这更像是一种黑客行为,因为 Char 并不是真正的数字。

特别注意如果您实际检查 'B' - 'A' 的值会发生什么:

> 'B' - 'A'
'\SOH'

即您得到的是字符 1,而不是实际将其视为 Int。上面的相等性检查之所以有效,是因为 1 被转换为 Char,但您不会获得相反的隐式转换。

我还省略了 Num 中的一些其他操作,因此您会收到编译器警告,并且某些操作将不起作用。您可以按照同样的思路添加它们,但它们的意义更小。

关于haskell - Haskell 中的 Char 算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241662/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com