Pregunta

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

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

que parece funcionar para los positivos, pero no para los negativos, citando:

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

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

¿Fue útil?

Solución

Cuando se escribe

absF -1.0;;

OCaml lo interpreta como

(absF) - (1.0);;

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

absF (-1.0);;

Otros consejos

El lenguaje núcleo tiene uno, abs_float.

Además, puede utilizar ~-. para denotar la negación unaria, y esto se aplica a números enteros, así como con la ~- 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

si tiene valor int puede utilizar

# abs(-1)
- : int = 1

otra cosa si usted tiene un flotador

# abs_float(-1.0)
- : float = 1.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top