2016-05-04 13 views
0
coprime a b = gcd a b == 1 

これは理論的には二つの整数が互いに素されているかどうかを計算する必要がありますが、私は、たとえば、coprime -3 4を実行した場合、正確にHaskellのコンパイラの中で何が起こるか疑問に思って。これがcoprime 3 4の場合、プログラムは正常に実行され、Trueを返します。この場合、Haskellコンパイラはどのように負の数値を扱うのですか?ハスケルの負の整数?

答えて

4

これを計算するのはHaskellコンパイラではありません。標準ライブラリのgcd functionです。 source code of the standard library

gcd    :: (Integral a) => a -> a -> a 
{-# NOINLINE [1] gcd #-} 
gcd x y   = gcd' (abs x) (abs y) 
        where gcd' a 0 = a 
         gcd' a b = gcd' b (a `rem` b) 

は、それが最初の最大公約数を計算する前に、2つの引数の絶対値をとることを示しています。

関連する問題