Datos mutables en OCaml
-
06-07-2019 - |
Pregunta
He creado un mutable estructura de datos en OCaml, sin embargo cuando voy a acceder a él, da un error extraño,
Aquí está mi código
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};;
Cuando hago esto en ocaml de nivel superior
let x = make _ vec _store;;
y, a continuación, intente hacer x.size
Me sale este error
Error: This expression has type unit -> vec_store
but an expression was expected of type vec_store
Cuál parece ser el problema?No puedo ver por qué esto no iba a funcionar.
Gracias, Faisal
Solución
make_vec_store
es una función. Cuando dices let x = make_vec_store
, estás configurando x para que sea esa función, al igual que si hubieras escrito let x = 1
, eso haría que x sea el número 1. Lo que quieres es el resultado de llamar esa función Según la definición de ()
, se necesita let x = make_vec_store ()
(también conocido como & Quot; unit & Quot;) como argumento, por lo que debería escribir <=>.
Otros consejos
prueba x = make_ vec_store ()
Como seguimiento a la excelente respondemos siempre.Se puede decir que su línea de ejemplo:
# let x = make_vec_store;;
val x : unit -> vec_store = <fun>
devuelve una función como la repl diré esto.Usted puede ver en la salida que x es de tipo <fun>
que no toma parámetros unit
y devuelve un tipo de vec_store
.
Contraste esto con la declaración
# let x = 1;;
val x : int = 1
lo cual nos indica que x es de tipo int y el valor 1.