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

これは、制限された範囲をo持つタイプがあり、したがって. ただし、定数は汎用数値型 ( ) であり、汎用整数型 ( ) です。この一般的な整数型を具体的な型に解決する必要がある場合 (これは を適用するときに発生します)、デフォルトの解決策は、制限のない整数型である を選択することです。この解決策の詳細は、セクション4.3.4 Ambiguous Types, and Defaults for Overloaded Numeric Operations of the Haskell 2010 Reportで説明されています。Int(mod (o^2087) 9797)Int102Num a => a(mod (102^2087) 9797)Integral a => aprintInteger

于 2012-08-24T16:26:09.380 に答える
0

1 つord目は、文字の数値表現 (この場合は 102) を返す関数です。

  1. 最初の行 ( ) は、それがどちらと等しいprint (o==102)かをチェックしているため、出力は.o102True

  2. 2 行目 ( print (mod (102^2087) 9797)) は、関数に 2 つの引数を適用しmodます。このmod関数は、最初の引数を 2 番目の引数で割った余りを返します。これは整数除算なので、小数部分は許可されません。キャレット演算子 ( ^) は、指数を取ることを意味します。つまり、「102 の 2087 乗」です。

  3. 最後の行 ( print (mod (o^2087) 9797)) は、異なる引数を使用して 2 行目と同じことを行います。

それが明確であることを願っています!

于 2012-08-24T16:23:59.327 に答える