2017-03-02 6 views
1

Comme expliqué dans le type REAL signature, réel défini SML n'est pas un type d'égalité et donc l'expression suivante ne réduitégalité force pour les nombres réels en réel dans 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) 

Cependant, ce n'est pas à portée de main comme Les types de données et les listes contenant des réels perdent également leur égalité. Je devrais surcharger l'égalité polymorphe = avec Real.== ainsi il pourrait approximativement considérer des réels aussi.

Est-ce possible?

EDIT: question Edité pour être plus clair

Répondre

2

Avez-vous lu Why can't I compare reals in Standard ML et considèrent l'opérateur Real.== ou effectuer un test epsilon? Avez-vous considéré un type comme Data.Decimal de Haskell (dans lequel la mantisse et l'exposant sont traités comme une paire de nombres entiers)?

+0

Oui, j'ai déjà lu le message Stack Overflow. Ma question est "Puis-je surcharger' = 'avec' Real. == '"? Parce que j'ai besoin d'utiliser des réels dans les types de données et les listes –

1

La réponse simple est: non, vous ne pouvez pas.

+0

Merci pour la réponse pertinente. –