3

有人可以向我解释这个输出吗?我是 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

4

2 回答 2

7

这是因为ohas 类型Int的范围有限,因此(mod (o^2087) 9797)也是Int. 但是,常量102是通用数值类型 ( Num a => a) 和(mod (102^2087) 9797)通用整数类型 ( Integral a => a)。当这个泛型整数类型必须解析为具体类型时,这发生在应用 时print,默认解析是选择Integer无界整数类型。此解决方案的详细信息在Haskell 2010 报告的4.3.4 模糊类型和重载数值运算的默认值部分中进行了描述。

于 2012-08-24T16:26:09.380 回答
0

首先,ord是一个函数,它返回一个字符的数字表示,在本例中为 102。

  1. 您的第一行 ( print (o==102)) 正在检查是否o等于102它,因此输出True

  2. 第二行 ( print (mod (102^2087) 9797)) 将两个参数应用于mod函数。mod当第一个参数除以第二个参数时,该函数返回余数。这是整数除法,因此不允许使用小数部分。插入符运算符 ( ^) 表示采用指数。即“102 的 2087 次方”。

  3. 最后一行 ( print (mod (o^2087) 9797)) 与第二行相同,但参数不同。

希望这很清楚!

于 2012-08-24T16:23:59.327 回答