3

OCamlで可変デー​​タ構造を作成しましたが、アクセスしようとすると奇妙なエラーが発生します。

これが私のコードです

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};;

私がocamlトップレベルでこれを行うとき

let x = make _ vec _store;;

その後、x.sizeこのエラーが発生します

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

何が問題だと思われますか?なぜこれがうまくいかないのかわかりません。

ありがとう、ファイサル

4

3 に答える 3

12

make_vec_store関数です。と言うときはlet x = make_vec_store、xをその関数に設定しているのと同じように、を書いた場合と同じように、let x = 1xは1になります。必要なはその関数を呼び出した結果です。make_vec_storeの定義によれば()、引数として(「ユニット」とも呼ばれます)を取るので、と書くことになりますlet x = make_vec_store ()

于 2009-10-27T07:44:18.000 に答える
4

x = make_ vec_store()を試してください

于 2009-10-27T06:19:33.967 に答える
2

提供された優れた回答者へのフォローアップとして。あなたの例の行は次のようにわかります。

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

replがこれを教えてくれるので、関数を返します。出力から、xは<fun>パラメーターを受け取らずunit、タイプを返すタイプであることがわかりますvec_store

これを宣言と比較してください

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

これは、xがint型で値が1であることを示しています。

于 2009-10-27T19:04:55.187 に答える