Domanda

Ho bisogno di una funzione di valore assoluto per i float in OCaml e il linguaggio principale non sembra possederne una, quindi ho scritto quanto segue:

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

che sembra funzionare per gli aspetti positivi ma non per quelli negativi, citando:

Questa espressione è di tipo float -> float ma qui viene utilizzata con il tipo int

Qual è l'errore nella mia logica?

È stato utile?

Soluzione

Quando digiti

absF -1.0;;

OCaml lo interpreta come

(absF) - (1.0);;

cioè.come sottrazione.Invece, fallo

absF (-1.0);;

Altri suggerimenti

Il linguaggio di base ha uno, abs_float.

Inoltre, è possibile utilizzare ~-. per indicare la negazione unaria, e questo vale per gli interi e con il ~- dell'operatore. È possibile definire un tale operatore (anche se esiste già) in questo modo:

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

se avete valore int può utilizzare

# abs(-1)
- : int = 1

altra cosa se si dispone di un float

# abs_float(-1.0)
- : float = 1.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top