Ocamlでは、いくつかの数値で初期化された「グローバル」(つまり、ファイルスコープを持つ)配列があり、次にそれらの数値に対していくつかの操作を実行し、次にそれらの数値を合計する関数を呼び出します。この配列は「グローバル」であるため、わざわざ配列を引数として渡す必要はありませんでした。結局、Ocamlは、配列を操作した後ではなく、初期化された数値の合計を計算しました(コンパイル時だと思います)。起こった。私の質問は、なぜこれが起こるのかということです。私はバグを追跡するために約3時間を費やしました!これはOcamlの副作用のない部分と関係がありますか?もしそうなら、このようなことが起こらないようにするためのルールは何ですか?
ありがとう
編集:あなたたちは非常に正しいです、私は基本的に台無しにした。これは本質的に私のコードでした
let my_array = Array.make 10 0;;
let sum_array = ...;;
let my_fun =
do_stuff_with_array args;
sum_array;;
もちろん、sum_array
事前に計算されていました。これに変更して機能しましたが、これが最善の解決策ですか?
let my_array = Array.make 10 0;;
let sum_array _ = ...;;
let my_fun =
do_stuff_with_array args;
sum_array ();;