2009-03-20 7 views
7

Estoy en la necesidad de una función de valor absoluto para los flotadores en OCaml y el núcleo del lenguaje de poseer uno, así que escribió lo siguiente:Valor absoluto de los flotadores en el núcleo OCaml

let absF (f:float) = if f > 0.0 then f else (f *. -1.0);; 

que parece a trabajar para los positivos, pero no para los negativos, citando:

Esta expresión tiene el tipo de flotador - flotador> pero se usa aquí con el tipo int

¿Cuál es el error en mi lógica?

Respuesta

10

Al escribir

absF -1.0;; 

OCaml lo interpreta como

(absF) - (1.0);; 

es decir, como una resta. En su lugar, haga

absF (-1.0);; 
13

El lenguaje central tiene uno, abs_float.

Además, puede usar ~-. para designar la negación unaria, y esto también se aplica a los enteros con el operador ~-. Se puede definir como un operador (a pesar de que ya existe) de esta manera:

let (~-) a : int = 0 - a 
let (~-.) a : float = 0.0 -. a 
2

si tiene valor int puede utilizar

# abs(-1) 
- : int = 1 

otra cosa si usted tiene un flotador

# abs_float(-1.0) 
- : float = 1.