Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的Haskell/GHC输出_Haskell - Fatal编程技术网

奇怪的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
    有type
    Char->Int
    ,所以
    o
    Int
    。在Haskell中,
    Int
    s有一个上限,但
    Integer
    s没有。这似乎解决了问题。非常感谢你。