2017-03-02 1 views
1

Wie im REAL signature erklärt, real-Typ in SML definiert ist kein Typ Gleichheit und damit der folgende Ausdruck nicht reduziert nichtKraft Gleichheit für reelle Zahlen in Real in SML

> 1.0 = 1.0; 
poly: : error: Type error in function application. 
    Function: = : ''a * ''a -> bool 
    Argument: (1.0, 1.0) : real * real 
    Reason: Can't unify ''a to real (Requires equality type) 

Dies ist jedoch nicht praktisch, da Datentypen und Listen, die reals enthalten, verlieren auch die Gleichheit. Ich müsste polymorphe Gleichheit = mit Real.== überladen, so könnte es ungefähr auch Reals betrachten.

Ist das möglich?

EDIT: Herausgegeben Frage klarer sein

Antwort

2

Haben Sie gelesen Why can't I compare reals in Standard ML und betrachten die Real.== Operator oder ein Epsilon-Test durchführen? Haben Sie einen Typ wie Haskell Data.Decimal (in dem die Mantisse und der Exponent als ein Integer-Paar behandelt werden) betrachtet?

+0

Ja, ich habe schon gelesen, dass Stack Overflow post. Meine Frage ist "Kann ich' 'mit' Real. == '" überladen? Weil ich reals in Datentypen und Listen verwenden muss –

1

Die einfache Antwort lautet: Nein, das geht nicht.

+0

Danke für die relevante Antwort. –

Verwandte Themen