簡體   English   中英

奇怪的Haskell / GHC輸出

[英]Strange Haskell/GHC output

有人可以向我解釋這個輸出嗎? 我在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

這是因為o具有類型Int ,其具有有限的范圍,因此(mod (o^2087) 9797)也是Int 然而,常數102是通用數字類型( Num a => a )並且(mod (102^2087) 9797)是通用整數類型( Integral a => a )。 當必須將此泛型整數類型解析為具體類型(在應用print時發生)時,默認分辨率是選擇Integer ,一種無界積分類型。 有關此解決方案的詳細信息,請參見4.3.4模糊類型和 Haskell 2010報告的 重載數值操作默認值

首先, 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) )與第二行的作用相同,具有不同的參數。

希望很清楚!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM