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

Das sollte theoretisch berechnen, ob zwei Ganzzahlen Cofrime sind, aber ich frage mich, was genau passiert in der Haskell 'Compiler', wenn ich laufen würde, sagen, coprime -3 4. Wenn dies coprime 3 4 wäre, würde das Programm gut laufen und True zurückgeben. Wie geht der Haskell-Compiler in diesem Fall mit negativen Zahlen um?Haskell Cofrime negative ganze Zahlen?

Antwort

4

Es ist nicht der Haskell-Compiler, der dies berechnet. Es ist die gcd function aus der Standardbibliothek. Die 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) 

zeigt, dass es zuerst den Absolutwert der beiden Argumente nimmt vor den größten gemeinsamen Nenner zu berechnen.