2015-08-05 17 views
5

Ich möchte eine klare Erklärung von Num, Real, Integral, Integer, Int, Ratio, Rational, Double, Float.Erläuterung der Zahlen in Haskell

+2

Vielleicht gefällt Ihnen die [Grafik aus dem Bericht] (https://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1270011), die die Beziehungen zwischen den Standardklassen und -typen beschreibt. –

+1

Für den Anfang hilft das? https://wiki.haskell.org/Converting_numbers – ErikR

+0

Sie sollten hier einen Blick werfen: https://en.wikibooks.org/wiki/Haskell/Type_basics_II –

Antwort

9

Diese Antwort geht davon aus, dass Sie den Unterschied zwischen Typen und Typklassen kennen. Wenn dieser Unterschied zu dir ist dann clear up your understanding dort vor dem Lesen.

Num

Num ist ein typeclass, die alle numerischen Typen enthält.

:info Num 
class Num a where 
    (+) :: a -> a -> a 
    (-) :: a -> a -> a 
    (*) :: a -> a -> a 
    negate :: a -> a 
    abs :: a -> a 
    signum :: a -> a 
    fromInteger :: Integer -> a 
     -- Defined in ‘GHC.Num’ 
instance Num Word -- Defined in ‘GHC.Num’ 
instance Num Integer -- Defined in ‘GHC.Num’ 
instance Num Int -- Defined in ‘GHC.Num’ 
instance Num Float -- Defined in ‘GHC.Float’ 
instance Num Double -- Defined in ‘GHC.Float’ 

Echt

Auch ein typeclass diese Typen abdeckt, die als reale Wert dargestellt werden kann (der Rational-Typ).

:info Real 
class (Num a, Ord a) => Real a where 
    toRational :: a -> Rational 
     -- Defined in ‘GHC.Real’ 
instance Real Word -- Defined in ‘GHC.Real’ 
instance Real Integer -- Defined in ‘GHC.Real’ 
instance Real Int -- Defined in ‘GHC.Real’ 
instance Real Float -- Defined in ‘GHC.Float’ 
instance Real Double -- Defined in ‘GHC.Float’ 

Integral

Eine Typklasse für Integrale, wissen Sie, ...,-2,-1,0,1,.... Typen wie Integer (aka Big Int), Int, Int64 usw. sind Instanzen.

:info Integral 
class (Real a, Enum a) => Integral a where 
    quot :: a -> a -> a 
    rem :: a -> a -> a 
    div :: a -> a -> a 
    mod :: a -> a -> a 
    quotRem :: a -> a -> (a, a) 
    divMod :: a -> a -> (a, a) 
    toInteger :: a -> Integer 
     -- Defined in ‘GHC.Real’ 
instance Integral Word -- Defined in ‘GHC.Real’ 
instance Integral Integer -- Defined in ‘GHC.Real’ 
instance Integral Int -- Defined in ‘GHC.Real’ 

Integer

A-Typ, kein Typklasse wie, was wir bis jetzt über gesprochen haben, kann man erkennen, unbegrenzt ganze Zahlen darstellen. Also 2^3028 ist ein rechtlicher Wert.

Int

Eine feste Breite integral. Im GHC-Compiler sind dies 32 oder 64 Bits, abhängig von Ihrer Architektur. Die Haskell-Sprache garantiert nur, dass dies mindestens 29 Bit sein wird.

Verhältnis

Dies ist eine Art Konstruktor, so dass Sie so etwas wie Ratio Integer sagen würden, einen Typen für Quote von zwei ganzen Zahlen zu erhalten (mathematisch a/b).

Rational

Nun ein rationaler ist buchstäblich ein Verhältnis zweier ganzer Zahlen, Verhältnis zu verstehen und Sie sind gut:

:i Rational 
type Rational = Ratio Integer 

Doppel

Ein Typ für double precision floating Punktwerte.

Float

A-Typ für einfache Genauigkeit Gleitkommawerte.

+1

'Ratio' ist das Verhältnis zweier Werte mit einem * beliebigen * numerischen Typ. 'Rational' ist das Verhältnis zweier ganzzahliger * Ganzzahlen. – MathematicalOrchid

0

Es ist ein interessantes Bild in den Haskell documentation die Beziehungen zwischen den Klassen und den Typinstanzen zeigt, die die meisten von denen, die Sie erwähnen:

bezüglich der Rational numbers:

Für jeder Integral Typ t, gibt es eine Art Ratio t von rationalen Paaren mit Komponenten des Typs t. Der Typname Rational ist ein Synonym für Ratio Integer.