2011-03-27 7 views
7

ocamlで配列を実装するのに少し問題があります。例えば、端末(konsoleの)上および私は出力としてOcamlの実装

val tab : int array = [|6; 6; 6; 6; 6|] 

を有する

let tab = Array.make 5 6; 

を入力。それで、長さが5の配列を作成し、すべてのケースを6で埋めます。わかりました。私はその部分を理解しています。しかし、私は、例えば、ケイトのようなテキストエディタでそれを入力すると、それを保存し、それをそのコンパイル私はこのエラーを取得する:

Error: Unbound value Array.make 

それは配列をとる理由を私は理解していません。 kateの値として作成し、Array.makeを端末の関数として受け取ります。私はファイルを ".ml"拡張子で保存しました。私は​​を使ってコンパイルします。 お願いします。ありがとう。

答えて

5

私はあなたのプログラムをocamlcでコンパイルしました。それはうまくいった(OCaml 3.12.0を使用して)。

Array.makeがまだArray.createと命名されたときから、コンパイルしようとすると古いバージョンのコンパイラが呼び出されていると思います。新しいバージョンをインストールしたときに、ファイルの一部(トップレベルなど)を上書きしたが、コンパイラなど他のファイルを上書きしていない可能性があります。確認するには、ocamlc -vocamlのバージョンを比較してください。

OCamlのメッセージ "Unbound value"については、関数は値です。実装者は、「関数でないUnbound値」と「関数であるUnbound値」を区別しませんでしたが、これは問題の原因ではありません。あなたの問題の原因は、Array.makeがまったくアンバインドされていることです。

+0

どちらも私に同じバージョンをくれました。バージョン3.11.2。私は以前のバージョンに属するファイルを上書きしたとは思わない。私はちょうど私のPCにLinuxをインストールしたので、私はocamlの以前のバージョンのantを持っていなかった。私はocamlと入力して検証しましたが、ocamlはまだインストールされていないと書いてあります。このバージョン3.11.2をインストールしました。私はArray.createを試みましたが、私はまだ同じ問題を抱えています。私が使用しているバージョンのためだと思いますか? – mkab

+0

@mktabバージョン3.11.2では間違いなく動作するはずです。バージョン3.12.0は、 'Array'モジュールであるか、' make'モジュールであるかを教えてくれるでしょう。これは、このバージョンがもたらした多くの小さな改良のうちの一つですが、あなたが得ようとしているエラーは謎です。 –

+2

@mktabファイル.../lib/ocaml/array.cmiがコンパイラによって見つけられない可能性があります。おそらくそれが欠落しているか、またはあなたのディストリビューションのパッケージが、コンパイラ以外の場所にあるファイルをコピーすることによって不適切に準備されていました。もしそうなら、-Iと-Lのオプションを使って修正できます。ソースからOCamlを再コンパイルすることをお勧めします。 –

3

エラーが見つかりました。それは非常にばかげたものです。私はファイルを "array.ml"として保存しました。だから、コンパイル中にarray.cmiファイルが作成されました。このファイルを.../lib/ocaml/array.cmiのファイルと混同していると思います。私は本当にわからない。だから私は "table.ml"にファイルの名前を変更し、それは完全にコンパイルされました。彼らがこの2つのファイルを混乱させたのは夢中です。

+0

'../lib/ocaml/ array.cmi'を明示的に指定する方法は? – updogliu