奇怪的Haskell/GHC输出
有人能给我解释一下这个输出吗?我是哈斯克尔的新手,不知道为什么会这样奇怪的Haskell/GHC输出,haskell,Haskell,有人能给我解释一下这个输出吗?我是哈斯克尔的新手,不知道为什么会这样 import Data.Char o=ord 'f' main=do print (o==102) print (mod (102^2087) 9797) print (mod (o^2087) 9797) 输出: xxx:~/Arbeitsfläche$ runhaskell st.hs True 5253 0 GHC 7.4.1版Ubuntu首先是一个函数,返回字符的数字表示,在本例中为102 您的
import Data.Char
o=ord 'f'
main=do print (o==102)
print (mod (102^2087) 9797)
print (mod (o^2087) 9797)
输出:
xxx:~/Arbeitsfläche$ runhaskell st.hs
True
5253
0
GHC 7.4.1版Ubuntu首先是一个函数,返回字符的数字表示,在本例中为102
print(o==102)
)正在检查o
是否等于它所在的102
,因此输出True
print(mod(102^2087)9797)
)将两个参数应用于函数。当第一个参数除以第二个参数时,mod
函数返回余数。因此,不允许使用小数部分。插入符号运算符(^
)表示已执行。i、 e.“102至2087的幂”print(mod(o^2087)9797)
)的作用与第二行相同,但参数不同希望这是清楚的 这是因为
o
的类型Int
的范围有限,因此(mod(o^2087)9797)
也是Int
。然而,常数102
是通用数字类型(Num a=>a
),而(mod(102^2087)9797)
是通用积分类型(积分a=>a
)。如果必须将此泛型整数类型解析为具体类型(在应用打印时发生),则默认解析为选择整数
,这是一种无界整数类型。这个解析的细节在章节中有描述。我认为Nymer很困惑,因为最后一行输出0而不是5253,尽管o==102
。不太清楚,但那不是我。ord
有typeChar->Int
,所以o
是Int
。在Haskell中,Int
s有一个上限,但Integer
s没有。这似乎解决了问题。非常感谢你。