2017-02-12 3 views
1

Mon code:erreur OCaml une expression était attendue de type int (erreur de confusion)

let safe_log10 = function x -> if (x <= 0.) then None else Some (log10 x);; 

Avec entrée -1.0, cela donne:

safe_log10 -1.0;; 
Error: This expression has type float -> float option 
     but an expression was expected of type int 

Cependant, il fonctionne très bien avec (-1.0):

# safe_log10 (-1.0);; 
- : float option = None 

Pourquoi est-ce que cela se produit, et comment puis-je réparer la fonction pour safe_log10 -1.0? Merci.

Répondre

1

Peu importe que - et 1.0 sont écrits ensemble, ce - est encore un opérateur binaire, et votre expression ressemble à function - float, qui n'a pas de sens. En OCaml, contrairement à beaucoup d'autres langages, le binaire - ne peut être appliqué qu'à int et int; même pour les flotteurs, vous avez besoin d'un opérateur différent -..