Domanda

Ho creato una struttura di dati mutevole in OCaml, tuttavia quando vado ad accedervi, dà uno strano errore,

Ecco il mio codice

type vector = {a:float;b:float};;
type vec_store = {mutable seq:vector array;mutable size:int};;

let max_seq_length = ref 200;;

exception Out_of_bounds;;
exception Vec_store_full;;

let vec_mag {a=c;b=d} = sqrt( c**2.0 +. d**2.0);;


let make_vec_store() = 
    let vecarr = ref ((Array.create (!max_seq_length)) {a=0.0;b=0.0}) in
         {seq= !vecarr;size=0};;

Quando lo faccio in ocaml top-level

let x = make _ vec _store;;

e poi prova a fare x.size Ottengo questo errore

Error: This expression has type unit -> vec_store
       but an expression was expected of type vec_store

Qual è il problema? Non vedo perché non funzionerebbe.

Grazie, Faisal

È stato utile?

Soluzione

make_vec_store è una funzione. Quando dici let x = make_vec_store, stai impostando x per essere quella funzione, proprio come se avessi scritto let x = 1, questo renderebbe x il numero 1. Quello che vuoi è il risultato della chiamata quella funzione. Secondo la definizione di (), prende let x = make_vec_store () (noto anche come & Quot; unit & Quot;) come argomento, quindi dovresti scrivere <=>.

Altri suggerimenti

prova x = make_ vec_store ()

A seguito dell'ottima risposta fornita. Puoi dire che la tua riga di esempio:

# let x = make_vec_store;;
val x : unit -> vec_store = <fun>

restituisce una funzione poiché il sostituto te lo dirà. Dall'output puoi vedere che x è di tipo <fun> che non accetta parametri unit e restituisce un tipo vec_store.

Contrasta questo con la dichiarazione

# let x = 1;;
val x : int = 1

che ti dice che x è di tipo int e valore 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top