Haskell中的Char算法
在许多语言中,您可以为某个整数i编写Haskell中的Char算法,haskell,char,Haskell,Char,在许多语言中,您可以为某个整数i编写'A'+i,以获得字母表中的一个字母。在哈斯克尔我怎么做?(还有反向操作,如let ch='B'in(ch-'A'))==1) 正如注释中指出的,您可以使用Data.Char中的函数在Int和Char之间进行转换。然而,这并不像你所要求的那样含蓄 如果您真的想要这样做,理论上可以创建一个Num实例,例如: import Data.Char (chr, ord) instance Num Char where c1 + c2 = chr (ord c1
'A'+i
,以获得字母表中的一个字母。在哈斯克尔我怎么做?(还有反向操作,如let ch='B'in(ch-'A'))==1
)
正如注释中指出的,您可以使用
Data.Char
中的函数在Int
和Char
之间进行转换。然而,这并不像你所要求的那样含蓄
如果您真的想要这样做,理论上可以创建一个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'
i、 e.您得到字符1
,而不是实际将其视为Int
。上面的相等性检查之所以有效,是因为1
被转换为Char
,但不会得到反向的隐式转换
我还省略了
Num
中的一些其他操作,因此您将收到编译器警告,而一些操作将无法工作。您可以沿着相同的行添加它们,但它们的意义更小。ord
和chr
来自Int和Char之间的转换。顺便说一句,Char
是的一个实例。无需实现其他Num类函数,如signum
?我在上一段提到过这一点(忍者在中编辑,所以你可能没有看到它本来)-理论上有些东西需要它们,但在Char
上这样做更奇怪,所以为了解释的目的,我省略了它们。我最终使用了chr
和ord
,但我也可以接受给出的唯一答案。
> 'B' - 'A'
'\SOH'