在许多语言中,您可以写'A' + i一些整数i来获得字母表的字母.我怎么能在Haskell中做到这一点?(还有反向操作let ch = 'B' in (ch - 'A')) == 1)
Prelude> 'A' + 1
No instance for (Num Char) arising from a use of `+'
Run Code Online (Sandbox Code Playgroud)
正如在评论中指出,可以相互转换Int,并Char从功能Data.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
Run Code Online (Sandbox Code Playgroud)
然后你得到
> 'A' + 1
'B'
> 'B' - 'A' == 1
True
Run Code Online (Sandbox Code Playgroud)
但这是一个黑客,因为一个Char不是真正的数字.
特别注意如果您实际检查以下值,会发生什么'B' - 'A':
> 'B' - 'A'
'\SOH'
Run Code Online (Sandbox Code Playgroud)
即你得到的角色,1而不是实际上看到它Int.上面的等式检查有效,因为1转换为a Char,但是没有反向获得隐式转换.
我也省略了其他一些操作,Num所以你会得到编译器警告,有些操作不起作用.你可以沿着相同的线条添加它们,但它们的含义更少.
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |